From c9fb8caea7e364aede4fb71aab0ad457e4f9e9b9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 11 Jan 2024 03:44:49 +0000 Subject: [PATCH] Deploy elaraproject/elara-hub to elaraproject/elara-hub:gh-pages --- 404.html | 3 + 6-month-roadmap-1/index.html | 256 + all-about-pdes/index.html | 359 + alt-de-solver/index.html | 146 + app-plans/index.html | 250 + black-hole-raytracing/index.html | 183 + elara-array-api-plan/index.html | 298 + elara-gfx-continuing-work/index.html | 134 + elara-hub-creation/index.html | 158 + elara-hub-index/index.html | 185 + elara-math-optimization/index.html | 151 + elara-ml-api/index.html | 275 + elasticlunr.min.js | 10 + eval-christoffels/index.html | 196 + extra/index.html | 148 + focusing-chamber-1/angles-diagram.png | Bin 0 -> 98038 bytes focusing-chamber-1/index.html | 178 + focusing-chamber-1/result.png | Bin 0 -> 195366 bytes funny/index.html | 130 + future-extensions/index.html | 202 + geometrized/index.html | 136 + h2-co2/index.html | 137 + handbook-addthings/index.html | 161 + index.css | 1 + index.html | 161 + integration-techniques/index.html | 205 + katex/README.md | 125 + katex/contrib/auto-render.js | 349 + katex/contrib/auto-render.min.js | 1 + katex/contrib/auto-render.mjs | 244 + katex/contrib/copy-tex.js | 130 + katex/contrib/copy-tex.min.js | 1 + katex/contrib/copy-tex.mjs | 105 + katex/contrib/mathtex-script-type.js | 112 + katex/contrib/mathtex-script-type.min.js | 1 + katex/contrib/mathtex-script-type.mjs | 24 + katex/contrib/mhchem.js | 3216 +++ katex/contrib/mhchem.min.js | 1 + katex/contrib/mhchem.mjs | 3109 +++ katex/contrib/render-a11y-string.js | 881 + katex/contrib/render-a11y-string.min.js | 1 + katex/contrib/render-a11y-string.mjs | 800 + katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 63632 bytes katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 33516 bytes katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12368 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7716 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12344 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7656 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19584 bytes katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13296 bytes katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19572 bytes katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13208 bytes katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 51336 bytes katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 29912 bytes katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32968 bytes katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19412 bytes katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 33580 bytes katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 19676 bytes katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 53580 bytes katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 30772 bytes katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31196 bytes katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18668 bytes katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 31308 bytes katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 18748 bytes katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24504 bytes katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14408 bytes katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22364 bytes katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14112 bytes katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19436 bytes katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12316 bytes katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 16648 bytes katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 10588 bytes katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12228 bytes katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6496 bytes katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11508 bytes katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6188 bytes katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7588 bytes katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4420 bytes katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10364 bytes katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5980 bytes katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27556 bytes katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16028 bytes katex/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes katex/katex.css | 1081 + katex/katex.js | 18819 ++++++++++++++++++ katex/katex.min.css | 1 + katex/katex.min.js | 1 + katex/katex.mjs | 18406 +++++++++++++++++ library-plans/index.html | 377 + markdown-guide/index.html | 132 + menu/index.html | 193 + meta/index.html | 134 + multivar/index.html | 282 + open-sans/OFL.txt | 93 + open-sans/OpenSans-Bold.ttf | Bin 0 -> 130860 bytes open-sans/OpenSans-BoldItalic.ttf | Bin 0 -> 136360 bytes open-sans/OpenSans-Italic.ttf | Bin 0 -> 136604 bytes open-sans/OpenSans-Medium.ttf | Bin 0 -> 130976 bytes open-sans/OpenSans-MediumItalic.ttf | Bin 0 -> 136796 bytes open-sans/OpenSans-Regular.ttf | Bin 0 -> 130832 bytes open-sans/README.txt | 100 + open-sans/open-sans.css | 41 + outreach-plan/index.html | 143 + project-philosophy/index.html | 132 + relativity-hub/index.html | 140 + robots.txt | 4 + screens.css | 0 search_index.en.js | 1 + sitemap.xml | 99 + stages/index.html | 145 + standard-notation/index.html | 198 + visualization-outreach/index.html | 141 + 131 files changed, 53826 insertions(+) create mode 100644 404.html create mode 100644 6-month-roadmap-1/index.html create mode 100644 all-about-pdes/index.html create mode 100644 alt-de-solver/index.html create mode 100644 app-plans/index.html create mode 100644 black-hole-raytracing/index.html create mode 100644 elara-array-api-plan/index.html create mode 100644 elara-gfx-continuing-work/index.html create mode 100644 elara-hub-creation/index.html create mode 100644 elara-hub-index/index.html create mode 100644 elara-math-optimization/index.html create mode 100644 elara-ml-api/index.html create mode 100644 elasticlunr.min.js create mode 100644 eval-christoffels/index.html create mode 100644 extra/index.html create mode 100644 focusing-chamber-1/angles-diagram.png create mode 100644 focusing-chamber-1/index.html create mode 100644 focusing-chamber-1/result.png create mode 100644 funny/index.html create mode 100644 future-extensions/index.html create mode 100644 geometrized/index.html create mode 100644 h2-co2/index.html create mode 100644 handbook-addthings/index.html create mode 100644 index.css create mode 100644 index.html create mode 100644 integration-techniques/index.html create mode 100644 katex/README.md create mode 100644 katex/contrib/auto-render.js create mode 100644 katex/contrib/auto-render.min.js create mode 100644 katex/contrib/auto-render.mjs create mode 100644 katex/contrib/copy-tex.js create mode 100644 katex/contrib/copy-tex.min.js create mode 100644 katex/contrib/copy-tex.mjs create mode 100644 katex/contrib/mathtex-script-type.js create mode 100644 katex/contrib/mathtex-script-type.min.js create mode 100644 katex/contrib/mathtex-script-type.mjs create mode 100644 katex/contrib/mhchem.js create mode 100644 katex/contrib/mhchem.min.js create mode 100644 katex/contrib/mhchem.mjs create mode 100644 katex/contrib/render-a11y-string.js create mode 100644 katex/contrib/render-a11y-string.min.js create mode 100644 katex/contrib/render-a11y-string.mjs create mode 100644 katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 katex/fonts/KaTeX_Main-Bold.woff create mode 100644 katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 katex/fonts/KaTeX_Main-Italic.woff create mode 100644 katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 katex/fonts/KaTeX_Main-Regular.woff create mode 100644 katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 katex/fonts/KaTeX_Math-Italic.woff create mode 100644 katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 katex/fonts/KaTeX_Script-Regular.woff create mode 100644 katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 katex/katex.css create mode 100644 katex/katex.js create mode 100644 katex/katex.min.css create mode 100644 katex/katex.min.js create mode 100644 katex/katex.mjs create mode 100644 library-plans/index.html create mode 100644 markdown-guide/index.html create mode 100644 menu/index.html create mode 100644 meta/index.html create mode 100644 multivar/index.html create mode 100644 open-sans/OFL.txt create mode 100644 open-sans/OpenSans-Bold.ttf create mode 100644 open-sans/OpenSans-BoldItalic.ttf create mode 100644 open-sans/OpenSans-Italic.ttf create mode 100644 open-sans/OpenSans-Medium.ttf create mode 100644 open-sans/OpenSans-MediumItalic.ttf create mode 100644 open-sans/OpenSans-Regular.ttf create mode 100644 open-sans/README.txt create mode 100644 open-sans/open-sans.css create mode 100644 outreach-plan/index.html create mode 100644 project-philosophy/index.html create mode 100644 relativity-hub/index.html create mode 100644 robots.txt create mode 100644 screens.css create mode 100644 search_index.en.js create mode 100644 sitemap.xml create mode 100644 stages/index.html create mode 100644 standard-notation/index.html create mode 100644 visualization-outreach/index.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/6-month-roadmap-1/index.html b/6-month-roadmap-1/index.html new file mode 100644 index 0000000..62b7242 --- /dev/null +++ b/6-month-roadmap-1/index.html @@ -0,0 +1,256 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

6-month roadmap 1

+ +

Overview

+

Currently what is necessary is to make progress on both the theoretical and experimental fronts. On the theoretical front, detailed computer simulations and models should be made. On the experimental front, the first implementation should be well underway within 6 months.

+

6-month goals

+
    +
  • Research goals +
      +
    • Complete a third paper of full research paper length (12-15 pages)
    • +
    • Complete designs of the transmitter and receiver such that the individual components are ready to test, and whenever possible, perform computer simulations on each component
    • +
    • Begin in-lab experimentation and demonstrate concrete results
    • +
    +
  • +
  • Project goals +
      +
    • Recruit at least an additional 5 members
    • +
    • Get at least one more benefactor, member of faculty, or consultative advisor on board
    • +
    • Establish a unified project front and clear project organization
    • +
    +
  • +
+

Tasklist

+

Given the established 6-month goals, the following tasks must be completed. Note that this task list may be added to, but primarily for the purpose of clarification/expanding detail, and it is best not to remove any items from this task list.

+
    +
  • +Complete paper 2
  • +
  • +Create the 6-month roadmaps
  • +
  • +Clean up project and reorganize +
      +
    • +Create Elara Hub - dedicated project management and knowledge base website, see [New Elara Hub plan] +
        +
      • +Design
      • +
      • +Code with zola (include KaTeX support, Mermaid flow charts, sequence diagrams, and gantt diagrams, as well as charter graphs)
      • +
      • +Publish
      • +
      +
    • +
    • +Organize project knowledge base on Elara Hub
    • +
    +
  • +
  • +Complete microwave transmitter design +
      +
    • +Sketch out design
    • +
    • +Analyze design analytically or through numerical simulation
    • +
    • +Create full description of design, including relevant diagrams and simulation/theoretical analysis
    • +
    +
  • +
  • +Complete microwave receiver design +
      +
    • +Sketch out design
    • +
    • +Analyze design analytically or through numerical simulation
    • +
    • +Create full description of design, including relevant diagrams and simulation/theoretical analysis
    • +
    +
  • +
  • +Complete combined transmitter-receiver system design +
      +
    • +Combine designs of transmitter and receiver
    • +
    • +Analyze design analytically or through numerical simulation
    • +
    • +Create full description of design, including relevant diagrams and simulation/theoretical analysis
    • +
    +
  • +
  • +Complete experimental plans +
      +
    • +Plan for experiment 1 (successful generation of microwaves at >40% efficiency and detection at 40 cm distance from source)
    • +
    • +Plan for experiment 2 (successful transmission of microwaves over 40 cm distance at >30% efficiency)
    • +
    • +Plan for experiment 3 (successful conversion of visible light and transmission of microwaves at >30% efficiency)
    • +
    +
  • +
  • +Conduct experiments +
      +
    • +Experiment 1 +
        +
      • +Prepare materials, timing, and configuration
      • +
      • +Construct apparatus
      • +
      • +Conduct experiment
      • +
      +
    • +
    • +Experiment 2 +
        +
      • +Prepare materials, timing, and configuration
      • +
      • +Construct apparatus
      • +
      • +Conduct experiment
      • +
      +
    • +
    • +Experiment 3 +
        +
      • +Prepare materials, timing, and configuration
      • +
      • +Construct apparatus
      • +
      • +Conduct experiment
      • +
      +
    • +
    +
  • +
+ + +
+
+ + + + + + + + + diff --git a/all-about-pdes/index.html b/all-about-pdes/index.html new file mode 100644 index 0000000..1f75ff5 --- /dev/null +++ b/all-about-pdes/index.html @@ -0,0 +1,359 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

All about partial differential equations

+ +

A partial differential equation or PDE is any equation that contains a function and its partial derivatives. The general form of a PDE is:

+

$$ +F \left(x, y, \dots, f(x, y), \dots\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \dots \frac{\partial^n f}{\partial x^n}, \frac{\partial^n f}{\partial y^n} \dots \right) = G(x, y, \dots) +$$ +To shorten derivatives, we often use the $\nabla$ symbol, where:

+

$$ +\nabla^2 u = \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} + \frac{\partial^2 u}{\partial z^2} +$$

+

Some specific examples of PDEs include the heat equation:

+

$$ +\frac{\partial u}{\partial t} = \alpha^2 \nabla^2 u +$$ +The wave equation:

+

$$ +\frac{\partial^2 u}{\partial t^2} = c^2 \nabla^2 u +$$ +And Poisson's equation:

+

$$ +\nabla^2 u = f +$$ +PDEs can have many, many solutions. For instance, take the PDE:

+

$$ +\frac{\partial^2 u}{\partial x^2} = 0 +$$

+

The general solution of this PDE is $u(x, y) = xf(y) + g(y)$. And yes, those can be any functions of $y$, whether they be $e^y$ or $y \sin(y)$ or $y + 3y - \sqrt{y}$. Thus, just like ODEs need initial conditions to give unique solutions, PDEs need boundary conditions to give unique solutions. The typical set of boundary conditions for a PDE are values at the edges of the domain of the PDE (e.g. $u(x, t) \to 0$ as $x \to \pm \infty$). When the PDE is dependent on time, then the boundary condition for $t \to 0$ is often called an initial condition - remember, for PDEs, initial conditions are considered a type of boundary condition.

+

Numerically solving PDEs

+

The most common methods of solving PDEs numerically are the finite difference, finite element, and boundary element methods.

+

Encode derivatives as matrices - take wave equation as example. We have:

+

$$ +\frac{\partial^2 u}{\partial t^2} = c^2\frac{\partial^2 u}{\partial x^2} +$$

+

We want to discretize the second partial derivative. Recall that:

+

$$ +\frac{\partial^2 u}{\partial x^2} \approx \frac{u(x - h, t) + 2u(x, t) + u(x + h)}{h^2} +$$

+

Or, alternatively written:

+

$$ +\frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i - 1, j} + 2u_{i, j} + u_{i + 1, j}}{h^2} +$$

+

This works in all cases except at the left and right boundaries of the domain, as there is not another point to the left of the boundary to take the central difference. Instead, we use the single-sided difference - for the left, we have:

+

$$ +\frac{2u_{i, j} - 5u_{i+ 1, j} + 4u_{i + 2, j} - u_{i+3, j}}{h^2} +$$ +And for the right, we have:

+

$$ +\frac{-u_{i-3, j} + 4u_{i - 2, j} - 5u_{i - 1, j} + 2u_{i, j}}{h^2} +$$

+

Note: see https://web.media.mit.edu/~crtaylor/calculator.html for a calculator for these values (enter 0, 1, 2, 3 for the left-handed 2nd derivative and -3, -2, -1, 0 for the right-handed 2nd derivative).

+

Now, partial derivatives are linear operators, just like matrices. So we can spatially discretize the equation by turning the 2nd spatial partial derivative into a matrix $A$ acting on the solution vector $U$:

+

$$ +\frac{\partial^2 u}{\partial x^2} = AU +$$ +Where:

+

$$ +AU=\begin{bmatrix} +2 & -5 & 4 & -1 & & & \\ +1 & -2 & 1 & & & \\ +& 1 & -2 & 1 & & & \\ +& & \ddots & \ddots & \ddots & \\ +& & & 1 & -2 & 1 & \\ +& & -1 & 4 & -5 & 2 +\end{bmatrix} +\begin{bmatrix} +u_{1, 1} \\ +u_{1, 2} \\ +\vdots \\ +u_{1, n - 1} \\ +u_{1, n} \\ +u_{2, 1} \\ +\vdots \\ +u_{m, n} +\end{bmatrix} += \begin{bmatrix} +2u_{1, 1} -5 u_{1, 2} + 4 u_{1, 3} - u_{1, 4} \\ +u_{1, 3} - 2u_{1, 2} + u_{1, 1} \\ +u_{1, 4} - 2u_{1, 3} + u_{1, 2} \\ +\vdots \ +u_{i, 1} - 5u_{i, 2} + 4u_{i, 3} - u_{i, 4} \\ +u_{i, 3} - 2u_{i, 2} + u_{i, 1} \\ +\vdots \ +u_{i, n} - 2u_{i, n - 1} + u_{i, n - 1} \\ +-u_{i, n - 3} + 4u_{i, n - 2} -5u_{i, n - 1} + 2u_{i, n} +\end{bmatrix} +$$

+

By discretizing the spatial derivative, the partial time derivative simply becomes an ordinary time derivative. Thus we can rewrite as:

+

$$ +U'' = c^2 AU +$$ +Which is an ordinary differential equation that can be solved with conventional ODE solvers. The only thing left is to compute an initial condition $U_0(x)$ and $U_0'(x)$ (if you know the initial condition you can differentiate it to get the initial time derivative).

+

This method works well even in the higher-dimensional case. For instance, consider the generalized wave equation:

+

$$ +\frac{\partial^2 u}{\partial t^2} = c^2 \nabla^2 u +$$ +By encoding the Laplacian $\nabla^2 u$ as a matrix $A$ acting on $U$, the same approach can be used as with the other approaches previously mentioned. In fact, this approach works for all linear partial differential equations that have one time and one or several space derivatives.

+

For other cases of linear PDEs that are not time-based, such as Poisson's or Laplace's equation, they can be generally written in the form:

+

$$ +AU = B +$$ +And solved using standard linear algebra techniques.

+

Finally, for nonlinear PDEs, they can be generally written in the form:

+

$$ +AU - f(U) = 0 +$$

+

Which is a rootfinding problem that can be solved with Newton's method:

+

$$ +U_{i + 1} = U_{i} - J^{-1}U(x_0) +$$

+

Sources

+ +

Elara-math integration

+

In the future, the differential equation solver RK4 will be ported from elara-array to elara-math. elara-math will then have two differential equations solver classes - odesolve, which solves (singular or systems of) ordinary differential equations, and pdesolve for (singular or systems of) partial differential equations. Its API is to be inspired by Mathematica's ndsolve - see https://reference.wolfram.com/language/ref/NDSolve.html

+

The proposed numerical API:

+
h = 0.1
+n = 100
+c = 1
+
+# Auto-compute sparse matrix
+# for ∂2u/∂x^2
+# with 2nd-order approximation to second-order derivative
+diff_x = CentralDifference(2, order=2, step_size=h, grid_size=n)
+
+# Solve as ODE, etc. etc.
+# ... 
+
+

The proposed symbolic API:

+
def pde(c=1):
+	return D(D(u, t), t) - c ** 2 * D(D(u, x), x)
+
+solver = PDEsolve(pde, bc="Dirichlet")
+u = solver.compute(grid="disk")
+
+plt.title("Wave equation results")
+plt.imshow(u)
+plt.show()
+
+

Solving vector differential equations

+

To solve vector differential equations, it is necessary to break up the vector differential equation into its components, and then solve for each of the components. For example, the first two of Maxwell's equations result in 2 trivial equations. The second two are more complex, as the curl of a vector field produces another vector field. Thus, we must instead rewrite the curl component-by-component. The complete equations are:

+

$$ +\frac{\partial E_x}{\partial x} + \frac{\partial E_y}{\partial y} + \frac{\partial E_z}{\partial z} = \frac{\rho}{\epsilon_0} +$$ +$$ +\frac{\partial B_x}{\partial x} + \frac{\partial B_y}{\partial y} + \frac{\partial B_z}{\partial z} = 0 +$$ +$$ +\frac{\partial E_z}{\partial y} - \frac{\partial E_y}{\partial z} = -\frac{\partial B_x}{\partial t} +$$ +$$ +\frac{\partial E_x}{\partial z} - \frac{\partial E_z}{\partial x} = -\frac{\partial B_y}{\partial t} +$$ +$$ +\frac{\partial E_y}{\partial x} - \frac{\partial E_x}{\partial y} = -\frac{\partial B_z}{\partial t} +$$ +$$ +\frac{\partial B_z}{\partial y} - \frac{\partial B_y}{\partial z} = \mu_0 \left(J_x + \epsilon_0 \frac{\partial E_x}{\partial t}\right) +$$ +$$ +\frac{\partial B_x}{\partial z} - \frac{\partial B_z}{\partial x} = \mu_0 \left(J_y + \epsilon_0 \frac{\partial E_y}{\partial t}\right) +$$ +$$ +\frac{\partial B_y}{\partial x} - \frac{\partial B_x}{\partial y} =\mu_0 \left(J_z + \epsilon_0 \frac{\partial E_z}{\partial t}\right) +$$

+

So Maxwell's equations result in 8 coupled PDEs. However, only 6 of them are independent - any system that satisfies the last 6 PDEs also must satisfy the first 2, so long as the boundary conditions satisfy the conservation of charge.

+

Here, note that for a solution, the current density must be set, which consists of one function each for $J_x, J_y, J_z$.

+

Common PDEs

+

Wave equation:

+

$$ +\frac{\partial^2 u}{\partial t^2} = c^2 \nabla^2 u +$$

+

Heat/diffusion equation:

+

$$ +\frac{\partial T}{\partial t} = \alpha^2 \nabla^2 T +$$

+

Laplace's equation:

+

$$ +\nabla^2 u = 0 +$$ +Poisson's equation:

+

$$ +\nabla^2 u = f(u) +$$

+

Burger's equation:

+

$$ +\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = \nu \frac{\partial^2 u}{\partial x^2} +$$

+

Continuity equation:

+

$$ +\frac{\partial \rho}{\partial t} + \nabla \cdot u = 0 +$$

+

Navier-Stokes:

+

$$ +\nabla \cdot u = 0 +$$ +$$ +\rho \left(\frac{\partial u}{\partial t} + (u \cdot \nabla) u\right) = -\nabla p + \mu \nabla^2 u + \rho g +$$ +Maxwell's equations:

+

$$ +\nabla \cdot E = \frac{\rho}{\epsilon_0} +$$ +$$ +\nabla \cdot B = 0 +$$ +$$ +\nabla \times E = -\frac{\partial B}{\partial t} +$$ +$$ +\nabla \times B = \mu_0 \left(J + \epsilon_0 \frac{\partial E}{\partial t}\right) +$$ +Einstein's field equations:

+

$$ +G_{\mu \nu} = \frac{8\pi G}{c^4} T_{\mu \nu} +$$

+

Equations of quantum mechanics:

+
    +
  • Schrödinger equation
  • +
  • Pauli equation
  • +
  • Klein-Gordon equation
  • +
  • Dirac equation
  • +
+

Euler-Lagrange equations, Hamilton's equations

+

Black-Scholes equation

+ + +
+
+ + + + + + + + + diff --git a/alt-de-solver/index.html b/alt-de-solver/index.html new file mode 100644 index 0000000..51f57a8 --- /dev/null +++ b/alt-de-solver/index.html @@ -0,0 +1,146 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Alternate differential equation solver

+ +

"New" way to solve ODEs and PDEs that DOESN'T involve complicated computations or matrices (actually not new at all, but it might have potential):

+

Just use Taylor series and automatic differentiation. Consider, for example, the ODE:

+

$$ +\frac{dy}{dx} = 3y + 2x^2, y(0) = 3 +$$

+

$$ +y'' = 3y' + 4x, y' = 9 +$$ +$$ +y''' = 3y'' + 4, y'' = 27 +$$ +$$ +y''' = 3y''', y''=85 +$$

+

You can construct a Taylor series around the point $x = 0$ to approximate a solution $y(x)$ of the ODE, then use automatic differentiation to compute successive derivatives to refine that approximation. This approach doesn't have numerical precision errors, and it can be made arbitrarily precise, and also doesn't require complicated grids. And it can be extended for partial differential equations - you do the same, just with the partial derivatives version of Taylor series. And this works on all analytic functions, even non-elementary functions, so it's especially well-suited to arbitrary differential equations. The solver can use the Taylor remainder theorem to automatically choose the number of terms for the approximation to be within a specified maximum error tolerance.

+

For the Taylor series to be maximally accurate even at points far from the source, multiple taylor series is used. A new point $x_1$ is chosen based on the most distant point from the original point $x_0$ that satisfies the maximum error as defined by the Taylor remainder theorem. Then a new taylor series is constructed from the point $x_1$. This process can be repeated multiple times to generate an effective solution for all points in the domain.

+

(Note: there are definitely optimizations that can be done to make the Taylor series converge faster while retaining the same algorithm for ODE/PDE solving, but that is for another time.)

+ + +
+
+ + + + + + + + + diff --git a/app-plans/index.html b/app-plans/index.html new file mode 100644 index 0000000..db2d91c --- /dev/null +++ b/app-plans/index.html @@ -0,0 +1,250 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project Elara app plans

+ +

elara-geo

+

Rust reimplementation of https://github.com/tauzero7/GeodesicViewer

+

elara-DE

+

Make automated ODE and PDE solver. It should have the following features:

+
    +
  • Handle either single DE or system of DEs of any order
  • +
  • Support multivariable or single-variable scalar, vector, or tensor-valued function (or field) to solve for, as well as real or complex arguments
  • +
  • Enter in ODE or PDE as with as boundary/initial conditions symbolically (with SymPy-like syntax)
  • +
  • (Optional) compare solution to manually-inputted analytical solution
  • +
  • GPU acceleration for fast solving
  • +
  • Slope fields for first-order ODEs
  • +
  • Built-in visualization tools for solutions (defaults to lines for single-variable functions, heatmaps for two-variable (3D) functions, and density plots for three-variable (4D) functions, with the colors automatically scaled based on max intensity and the opacity of each pixel scaled based on the inputted grid density)
  • +
  • Has both a PINN (neural-network based) solver and a conventional grid-based solver.
  • +
+

elara-cas

+

(note: awaiting better name)

+

elara-cas is a Qalculate replacement, with LaTeX printing output, a syntax-highlighted REPL, and an optional visual editor for inserting complicating expressions.

+

Elara CAS will use integral/diff eq solver from https://arxiv.org/abs/1912.01412

+

UI inspired by https://github.com/bornova/numara-calculator

+

This should be the syntax:

+
// Basic calculations (these are done symbolically)
+1 + 1
+
+// Declaring variables
+var x, y, z
+
+// Declaring constants
+const G, M := 2e30, m := 1, c := 3e8
+
+// Declaring expressions
+// note the UI includes an optional MathQuill-style visual editor
+// to insert expressions (which it then outputs with the CAS
+// language) for convenience
+schwarzschild = (2 * G * M) / c^2
+
+// Declaring functions
+// Note the same MathQuill-style visual editor is available
+u(x) // function prototype (useful for differential equations)
+g(x) = 3 * x // scalar-valued single variable
+f(x, y, z) = 3 * x^2 + 5 * y + z // scalar-valued multivariable
+h(x, y) = (5 * x + 4, 7 * x + 8) // vector-valued
+
+// Plot a function
+// in the UI you can choose the domain and range
+// with sliders and pan/zoom on the graph
+plot f
+
+// Evaluating functions
+// in the UI you can choose between a numerical answer (e.g. 5.114342)
+// or a symbolic answer (e.g. sqrt(2) / 2)
+// for numerical answers, any constants will be evaluated with their
+// assigned numerical values
+f(1, 4, 3)
+
+// Taking derivatives without explicit evaluation
+dudx = diff u // here x doesn't need to be specified as it is the only variable
+
+// Taking derivatives
+dfdx = diff f, x
+dfdx(2, 6, 1)
+
+// Taking the gradient
+grad_f = grad f
+grad_f(2, 6, 1)
+
+// Taking the indefinite integral symbolicallly
+// This uses a neural network solver under the hood
+int_f = integrate f, x
+// you can then evaluate the definite integral with
+int_f(6) - int_f(1)
+
+// Taking the definite integral symbolically
+integrate f, x, 1, 6
+
+// Taking the definite integral
+// When doing so, the answer is computed
+// exclusively numerically
+quadrature f, x, 0, 5
+
+// Create equation
+myeq = eq 5 * x^2 + 8 * x, 78 * x + 5
+
+// Solve equation
+// in UI there is the option to solve
+// symbolically or numerically
+solve myeq, x
+
+// You can also use this as a lazy
+// expression rearranger
+sch_radius_eq = eq r_s, schwarzschild
+solve sch_radius_eq, M // rearrange to get mass in terms of r_s
+
+// Substitution
+subs myeq, x, 5 * y
+
+// Using ans
+5 * x^2 + 7 * sin(x)
+mynewexpr = ans
+
+// Note substitution is always symbolic
+// If you want to evaluate an expression
+// (not a function) then use eval
+// In eval you don't need to sub in the
+// value of any constants, just the variables
+eval 2 * M * x^2 + 3 * t, { x = 6, t = 0.1 }
+
+// Solving ordinary differential equations
+// (can solve 1st or 2nd order ODEs)
+// This uses a neural network solver under the hood
+mydiffeq = eq dudx, 3 * u * x
+dsolve eq // symbolic solver
+ndsolve eq // numerical solver - in UI there is option to show graph
+
+// Note however that Elara CAS is not suited
+// to complex numerical work or PDE solving,
+// both of which Elara DE specialize in
+
+

The very minimalist syntax only works because you cannot nest built-in functions like diff and integrate within other functions, and those functions are delimitated by the end of the line.

+

Elara Studio

+

For custom project elara test path tracer - you first export the UV unwrapped 3D models from your modeling tool, then in the path tracer GUI you can add PBR materials and lights and render. This path tracer BTW is very non essential, as the project has literally no need of a path tracer (we can just use Blender), so really it is just a proof of project technology.

+

However this can be an alternative workflow - if the app provided a big built-in asset library (and one the user can add to) with things like materials, textures, lighting setups, models and so forth, then the renderer might actually be a good idea.

+ + +
+
+ + + + + + + + + diff --git a/black-hole-raytracing/index.html b/black-hole-raytracing/index.html new file mode 100644 index 0000000..a8ff29f --- /dev/null +++ b/black-hole-raytracing/index.html @@ -0,0 +1,183 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Black hole raytracing

+ +

The general algorithm is this:

+
    +
  • Emit a bunch of rays from the camera at $(x, y)$ positions for each pixel in the final image
  • +
  • Calculate where they end up by numerically integrating along geodesics: +
      +
    • If they end up inside the event horizon, color should be black
    • +
    • Otherwise, color should be a sample color of whichever patch of night sky is in the direction they hit
    • +
    +
  • +
  • Set the color of the pixel located at position $(x, y)$ based on the previous step
  • +
+

Note that this has no global illumination as it is not a path tracer. A path tracer would actually generate photorealistic images, but this is just a proof of concept.

+

I will write it in numpy first, then port it to Rust once I get it working.

+
+

First, we position our black hole at the origin, $(0, 0, 0)$. We want to position our camera at $(6M, \pi / 2, \pi / 4)$ which should give a good view of the black hole.

+

Then, we want to produce our rays. Recall that a ray is typically given by:

+

$$ +\vec R(t) = \vec O + \vec t D +$$

+

Here, $\vec O$ is the origin, and $\vec D$ is the direction vector of the ray. Note that the normalized velocity vector is exactly the same thing as the direction vector, so $\vec D$ can also be interpreted as a normalized velocity vector.

+

However, we have a slight complication. Recall that rays of light are bent in curved spacetime. Therefore, the simple ray equation does not apply. We instead need to numerically integrate to find the position of a ray at time $t$. To do this, we will use two derived equations from Schwarzschild spacetime:

+

$$ +\frac{d^2 r}{ds^2} = -\frac{M}{r^2} + \frac{l^2}{r^3} - \frac{3Ml^2}{r^4} +$$

+

$$ +\frac{d^2 \phi}{ds^2} = -\frac{2l}{r^3} \frac{dr}{ds} +$$ +(there is a third equation, $\theta'' = 0$, but it's unnecessary to really mention it, as $\theta$ is constant)

+

We derived the two above equations from the radial motion equation and the $p_\phi$ constant of motion equation, and taking the derivative to get a second-order differential equation (which also fortunately cancels out the square roots and all the annoyances of squares appearing in derivative terms).

+

Here, we use the affine parameter $s$ as a substitute for time $t$, because light in General Relativity doesn't really experience time as it moves. So $s$ is like a "substitute" for time that we can effectively consider time, just for a light ray instead of an ordinary massive particle.

+

We will integrate from time $t_0$, when the rays leave the camera, to time $t_f$, where we can arbitrarily set $t_f$. We want to then find the position vector $\vec R(t)$ of the ray at $t_f$, or $\vec R(t_f)$. If $|\vec R(t_f)| < 2M$, that means the ray vector is inside the event horizon, so we want to return a color of black. Otherwise, we sample the color of the patch of night sky the ray position vector hits.

+

Alternatively, we can simply find the vector $\vec W = \vec R(t_r) - \vec O$, where $\vec W$ is the vector pointing from the origin (where the camera is) to the ray vector position. By converting it to Cartesian coordinates and then normalizing this vector, we have the $(x, y, z)$ coordinates of the ray vector position in terms of the camera's world unit sphere. Now this is where equirectangular textures come in handy, because we can then take those $(x, y, z)$ coordinates and find the $(u, v)$ coordinates of the world texture, from which we can sample the color. The formula is:

+

$$ +u = \frac{1}{2} + \frac{\operatorname{atan2}(W_z, W_x)}{2\pi} +$$

+

$$ +v = \frac{1}{2} + \frac{\operatorname{arcsin}(W_y)}{\pi} +$$

+

For each pixel, we will repeat these steps - creating a ray, tracing the ray, and then finding the final color it outputs, and assigning that color to that pixel. Then, we will have our complete image of the black hole.

+
+

$$ +\left(\frac{dr}{d\phi}\right)^2 = \frac{r^4}{b^2} - \left(1 - \frac{r_s}{r}\right) \left(\frac{r^4}{a^2} + r^2\right) +$$

+

Now we take the limit as $m \to 0$, therefore $a \to \infty$ and $b \to \infty$, so:

+

$$ +\left(\frac{dr}{d\phi}\right)^2 = - \left(1 - \frac{r_s}{r}\right)r^2 +$$

+

We take the derivative again to get a second-order differential equation that doesn't have a squared derivative:

+

$$ +\frac{d^2 r}{d\phi^2} = \frac{1}{2} r_s - r +$$

+
+

For debugging, we want to use the standard Newtonian $a = -\frac{GM}{r^2}$ equation to test.

+

https://github.com/tyler-a-cox/black_hole_raytracer/tree/master

+ + +
+
+ + + + + + + + + diff --git a/elara-array-api-plan/index.html b/elara-array-api-plan/index.html new file mode 100644 index 0000000..1a17eab --- /dev/null +++ b/elara-array-api-plan/index.html @@ -0,0 +1,298 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara-array API

+ +

Design goals:

+
    +
  • A pure Rust library designed NOT for FFI, but for use from only Rust.
  • +
  • Minimal set of features, leave more complex math/science functions (e.g. convolution, diff eq solvers) for elara-math to implement
  • +
  • FAST - really really really optimized and fast!!!
  • +
+
// Macros for convenient array creation up to 3D
+// However they are not recommended for array data
+arr![1, 2, 3, 4];
+arr![[1, 2], [3, 4]];
+
+// Explicit array creation
+// This is the *only* time data is allocated
+NdArray::new(your_vec);
+NdArray::arange(0..10);
+
+// methods
+// these either operate in-place
+// or don't perform any manipulations on the underlying
+// data (like the transpose function) to prevent 
+// copying for efficiency
+arr.dot(&arr2);
+arr.matmul(&arr2);
+arr.product();
+arr.len();
+
+// Operations default to in-place ops to prevent additional
+// copying or moves of data
+arr + arr2; // returns the result in arr
+arr * arr2;
+arr / arr2;
+
+// Indexing (for both getting and setting data)
+// these are implemented by two index implementations,
+// one for views and one for direct indices
+impl Index<[f64; N]> for NdArray<T, N>;
+impl Index<NdArrayView<f64, N>> for Ndarray<T, N>;
+
+// Construct a view
+// These replace numpy-style slices
+let yourview<f64, N> = NdArrayView::row_view(start, end, step);
+
+arr[[1, 3, 5]]; // direct indexing
+arr[yourview]; // view indexing
+
+// elara-array uses a specialized
+// binary file format for serializing arrays
+arr.save("array.elr");
+NdArray::from_file("array.elr");
+
+// The entire library supports full error handling
+// and is designed to be robust even on error
+
+

API reference:

+
// utility methods
+fn new();
+fn zeros();
+fn ones();
+fn eye();
+fn random();
+fn size(); // number of elements
+fn ndim();
+fn shape();
+fn flatten();
+fn reshape();
+fn mapv(); // elementwise in-place map
+
+// arithmetic methods
+fn sin();
+fn cos();
+fn tan();
+fn arcsin();
+fn arccos();
+fn arctan();
+fn sinh();
+fn cosh();
+fn tanh();
+fn exp();
+fn sqrt();
+fn cbrt();
+fn log();
+
+// statistical methods
+fn sum();
+fn min();
+fn max();
+fn mean();
+fn median();
+fn stddev(); // standard deviation
+
+// linalg methods
+fn dot(); // 1D only
+fn matmul(); // 2D only
+fn transpose(); // 2D only
+
+

Error API:

+
struct ErrorInfo {
+    source: &'static str, // the function that called the error
+    file: &'static str,
+    line: usize,
+    additional_info: String
+}
+
+pub enum {
+    SomeError1(ErrorInfo),
+    SomeError2(ErrorInfo)
+}
+
+

Slice/View API:

+
pub fn slice(&self, slice: &[Range<usize>]) -> ArrayView<T, N>;
+pub struct ArraySlice;
+
+// usage
+let a = arr![[0.0, 1.0], [2.0, 3.0]];
+
+// returns view of entire array
+a[&[.., ..]]
+
+// returns view of 1st inner element
+a[&[s!(0), ..]] // this is equal to a[&[..1, ..]]
+
+// returns view of range
+a[&[1..2, 1..2]]
+
+// for more exotic slices use the dedicated slicer
+let s = ArraySlice::new_columns([1, 5, 8]);
+a[s] // returns another view
+
+
    +
  • +Change all existing copying operations to operate in-place by default
  • +
  • +Implement arrayslices and views +
      +
    • +ArraySlices use a numpy-like syntax for indexing
    • +
    • +Views wrap a standard rust slice (&[T]) of an array
    • +
    +
  • +
  • +GPU support (this is most important!!!) + +
  • +
  • +API completion
  • +
  • +For select operations, implement alternative methods that create a new NdArray with the _copy suffix e.g. matmul_copy()
  • +
  • +Clean up examples to just 2 - one showing basic usage and indexing, and the other showing an applied example with an ODE solver
  • +
  • +Write tests for library
  • +
  • +Benchmark library to ensure good performance and add elara array benchmarks
  • +
  • +More helpful error messages (for good developer experience)
  • +
  • +Implement binary serialization
  • +
+

Optimizations:

+
    +
  • GPU computation & keeping data on the GPU for as long as possible
  • +
  • Using a clone-on-write backing array (Cow) so that no clones will be done unless necessary
  • +
+ + +
+
+ + + + + + + + + diff --git a/elara-gfx-continuing-work/index.html b/elara-gfx-continuing-work/index.html new file mode 100644 index 0000000..0a9018d --- /dev/null +++ b/elara-gfx-continuing-work/index.html @@ -0,0 +1,134 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara GFX continuing work plan

+ +

Implement several libraries on top of elara-gfx:

+
    +
  • elara-draw: Fabric.js-like library on top of elara-gfx, see http://fabricjs.com/fabric-intro-part-1
  • +
  • elara-ui: UI library on top of elara-gfx
  • +
+ + +
+
+ + + + + + + + + diff --git a/elara-hub-creation/index.html b/elara-hub-creation/index.html new file mode 100644 index 0000000..916b577 --- /dev/null +++ b/elara-hub-creation/index.html @@ -0,0 +1,158 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara Hub creation plan

+ +

Elara Hub is meant to be a new open-source home of project elara. It uses a git repository for collaboration, and zola to generate the docs. When editing it is advised to use zola serve to live-preview as you write. Elara hub is meant to read like obsidian, with obsidian-style internal links. In the future, it will also include a file switcher via command palette like obsidian, and maybe a graph view.

+

Elara Hub supports an extended markdown syntax adapted for technical writing and project management. It includes:

+
    +
  • CSV headers
  • +
  • Table of contents
  • +
  • Basic text formatting
  • +
  • Lists
  • +
  • Links
  • +
  • Quotes
  • +
  • Code blocks & syntax highlight
  • +
  • Horizontal rules
  • +
  • Footnotes
  • +
  • Formulas with KaTeX
  • +
  • Task lists
  • +
  • Internal linking
  • +
  • Diagrams with mermaid.js (which includes Gantt charts)
  • +
  • Plots with charter
  • +
  • Admonitions and notes (like MyST markdown)
  • +
  • Icons
  • +
  • Video/audio
  • +
  • Figures and captions
  • +
  • Automatic conversion of common characters (e.g. (c), --) to their respective unicode symbols
  • +
+

Future additions:

+
    +
  • Author support (a post can have many authors) - not sure how good of an idea this is, some pages like _index.md might have dozens of authors
  • +
  • Include the Open Sans font by default
  • +
+

In the future there will be a realtime collaborative editor that integrates with Elara Hub. The editor uses a CRDT that syncs everyone's edits. So on every startup, it loads the latest edit via CRDT (it doesn't store any files on the disk, only in memory, due to how the CRDT/server works). The user can then make their edits and those are automatically reflected on everyone's computer via the CRDT. At any point, users can submit a commit request, which basically freezes the state of the edits, checks out main in the Elara Hub repo to create a temporary staging branch, and commits the edits to the staging branch, as well as opening a pull request for that branch on github. Finally, a number of project-approved maintainers can merge that pull request or close it (depending on their judgement)

+ + +
+
+ + + + + + + + + diff --git a/elara-hub-index/index.html b/elara-hub-index/index.html new file mode 100644 index 0000000..0e3270c --- /dev/null +++ b/elara-hub-index/index.html @@ -0,0 +1,185 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara Hub Index

+ +

The Vision

+

Project Elära is a project to create a world worthy of human dignity through the spirit of collaboration and openness.

+

We gather people together to work on open research and open technologies that benefit everyone.

+

We want to inspire hope that we as individuals have the power together to do incredible things.

+
+

"Because the people who are crazy enough to think they can change the world, are the ones who do."

+
+

6-month roadmaps

+

The project is planned broadly with 6-month roadmaps which dictate the priorities of the next 6 months.

+ +

Key dates

+
    +
  • 11/10/23 - first paper submitted, got lab approved
  • +
  • 12/10/23 - second paper completed
  • +
+

Project directory

+

These are more in-depth pages about specific aspects of the project. Many of these pages are also hubs that cover one topic section and link to more detailed pages in that section.

+ +

Project standards reference

+

These are common standards used within the project.

+ +

Knowledge base

+

These are guides to specific areas of knowledge important to the project

+ +

Idea sketching

+

These are ideas of various project members that may (or may not) be incorporated into the project.

+ +

Other

+

Miscellaneous pages are linked here.

+ + + +
+
+ + + + + + + + + diff --git a/elara-math-optimization/index.html b/elara-math-optimization/index.html new file mode 100644 index 0000000..3925f2d --- /dev/null +++ b/elara-math-optimization/index.html @@ -0,0 +1,151 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara math optimization strategies

+ +

(All times given on macos)

+

Original time: 309s

+

After integration with matrixmultiply crate:

+

Time: 309s

+

Without println!() for loss:

+

Time: 317s

+

With reduced clones

+

Time: 277s

+
+

Use libblas to implement basic operations

+

Faster transpose implementation

+

Use release mode

+
+

Functions to optimize:

+
    +
  • Matmul
  • +
  • Relu
  • +
  • Sum
  • +
+
+

Implement model saving to JSON, TOML and binary with nanoserde +Unit tests for the library

+ + +
+
+ + + + + + + + + diff --git a/elara-ml-api/index.html b/elara-ml-api/index.html new file mode 100644 index 0000000..48f36e2 --- /dev/null +++ b/elara-ml-api/index.html @@ -0,0 +1,275 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara ML API proposal

+ +

elara-ml API - so there are actually 3 APIs currently being compared. The first one is PyTorch-style:

+

elara-ml API - so there are actually 3 APIs currently being compared. The first one is PyTorch-style:

+
pub struct MyModel {
+    input_layer: Input,
+    hidden_1: Dense,
+    hidden_2: Dense,
+    output_layer: Output
+}
+
+impl MyModel {
+    // x and y are here only for shape determination
+    fn new(x: Tensor, y: Tensor) -> MyModel {
+        // automatic shape determination by passing
+        // another layer as first argument
+        let input_layer = Input::new(x);
+        let hidden_1 = Dense::new(input_layer, 16);
+        let hidden_2 = Dense::new(hidden_1, 16);
+        let output_layer = Output::new(hidden_2, y);
+        
+        MyModel {
+            input_layer,
+            hidden_1,
+            hidden_2,
+            output_layer
+        }
+    }
+}
+
+impl Model for MyModel {
+    // Models can only have one output, for
+    // multi-input-output neural networks you
+    // need to chain together multiple Models
+    fn forward(x: Tensor) -> Tensor {
+        // These absolutely don't need to
+        // be in the same order as you declared
+        // in new() (but probably should be so
+        // that the auto shape determination works)
+        let a = self.input_layer.forward(x);
+        let b = self.hidden_1.forward(a);
+        let c = self.hidden_2.forward(b);
+        let d = self.output_layer.forward(c);
+        d
+    }
+}
+
+fn main() {
+    let model = MyModel::new();
+    model.compile(Optimizers::SGD);
+    model.fit(&x, &y, 500, 0.00001, true);
+}
+
+

This API makes it easiest to use pre-made models, because you can simply import the model and compile it. However, it might be too much abstraction - it can be a little hard to see what the model is actually doing, especially with methods like compile() and fit() that no longer have a 1-1 correspondence with performing operations on tensors.

+

The second uses a macro Sequential! to imitate Keras's sequential API. This makes it easiest to learn, but again, abstracts away too much, which is not ideal, especially given how much debugging is done when making NNs.

+

The third is most barebones, and is the Jax-inspired API. It looks like this:

+
// This is just a convenient way of
+// holding layers, there is nothing
+// special about this struct
+struct Layers {
+    pub input_layer: Input,
+    pub hidden_1: Dense,
+    pub hidden_2: Dense,
+    pub output_layer: Output
+}
+
+impl Layers {
+    // x and y are here only for shape determination
+    fn new(x: Tensor, y: Tensor) -> Layers {
+        // automatic shape determination by passing
+        // another layer as first argument
+        let input_layer = Input::new(x);
+        let hidden_1 = Dense::new(input_layer, 16);
+        let hidden_2 = Dense::new(hidden_1, 16);
+        let output_layer = Output::new(hidden_2, y);
+        
+        MyModel {
+            input_layer,
+            hidden_1,
+            hidden_2,
+            output_layer
+        }
+    }
+
+    // Note: for zero_grad()
+    // and update(), these can be
+    // made less verbose by creating an
+    // iter() method - see
+    // https://stackoverflow.com/questions/30218886/how-to-implement-iterator-and-intoiterator-for-a-simple-struct
+    fn zero_grad(&self) {
+        self.input_layer.zero_grad();
+        self.hidden_1.zero_grad();
+        self.hidden_2.zero_grad();
+        self.output_layer.zero_grad();
+    }
+
+    fn update(&self, lr: f64) {
+        self.input_layer.update(lr);
+        self.hidden_1.update(lr);
+        self.hidden_2.update(lr);
+        self.output_layer.update(lr);
+    }
+
+    fn save(&self) {
+        let weights = NNSerializer::new("weights.bin");
+        // Add labels to weights; they will be referred
+        // to by their labels when the weights are loaded
+        weights.add(self.input_layer, "input_layer");
+        weights.add(self.hidden_1, "hidden_1");
+        weights.add(self.hidden_2, "hidden_2");
+        weights.add(self.output_layer, "output_layer");
+        weights.write();
+    }
+}
+
+fn forward(layers: Layers, x: Tensor) -> Tensor {
+    let a = layers.input_layer.forward(x);
+    let b = layers.hidden_1.forward(a);
+    let c = layers.hidden_2.forward(b);
+    let d = layers.output_layer.forward(c);
+    d
+}
+
+fn mean_squared_error(y: Tensor, y_pred: Tensor) -> Tensor {
+    (&y_pred - &y).pow(2)
+}
+
+fn main() {
+    // load x and y...
+    let layers = Layers::new();
+    let pbar = TrainingProgress::new(); // used to display progress bars
+
+    // here we write our custom optimizer
+    for i in 0..1000 {
+        let preds = forward(layers, x);
+        // preds and loss are both tensors, so they
+        // can work with all the standard tensor methods,
+        // including output to graphviz files!
+        let loss = mean_squared_error(y, preds);
+        pbar.update(i, &loss); // shows latest progress
+        let lr = 1.0 - 0.9*i/100.0
+        loss.backward();
+        layers.update(lr);
+        layers.zero_grad();
+    }
+}
+
+

This approach has just the right amount of abstraction, and is very flexible, because it allows defining custom forward passes (with the ability to do multiple inputs or multiple outputs), custom loss functions, and custom optimizers. Furthermore, this API can easily interoperate with the PyTorch-style API. So this will be the API that is primarily focused on.

+ + +
+
+ + + + + + + + + diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Quickly evaluating the Christoffel symbols

+ +

Original reference: https://properphysics.wordpress.com/2014/08/02/christoffel-symbols-and-the-geodesic-equation-the-easy-way/comment-page-1/

+

Assume we want to evaluate the Christoffel symbols for the metric:

+

$$ +ds^2 = dr^2 + r^2 d \theta^2 + r^2 \sin^2 \theta d\phi^2 +$$

+

To do this, recall that the Lagrangian of a particle moving along a certain geodesic is given by:

+

$$ +\mathcal{L} = g_{\mu \nu} \frac{dx^\mu}{d\lambda} \frac{dx^\nu}{d\lambda} +$$ +(Yes, it's supposed to have a square root, but since the Lagrangian is a constant of motion you can square it and get the same result)

+

Recall also that the line element is given by:

+

$$ +ds^2 = g_{\mu \nu} dx^\mu dx^\nu +$$

+

So the Lagrangian of a free particle can simply be written:

+

$$ +\mathcal{L} = \frac{d}{d\lambda} (ds^2) +$$

+

We can replace the derivative to an affine parameter to one with respect to (proper) time for practical purposes. Doing this, we find the Lagrangian for the spherical metric is:

+

$$ +\mathcal{L} = \dot r^2 + r^2 \dot \theta^2 + r^2 \sin^2 \theta \dot \phi^2 +$$

+

We can then plug this Lagrangian into the Euler-Lagrange equations:

+

$$ +\frac{d}{d\lambda} \frac{\partial \mathcal{L}}{\partial \dot x} = \frac{\partial \mathcal{L}}{\partial x} +$$

+

to get (one equation each for $r$, $\theta$ and $\phi$). Note here that we assume each coordinate is a function of the other coordinates, that is $r = r(\theta, \phi), \theta = \theta(r, \phi), \phi = \phi(r, \theta)$, so chain rule/implicit differentiation is necessary. Doing all the steps, and without simplifying, the result is:

+

$$ +2 \ddot r = 2r \dot \theta^2 + 2r \sin^2 \theta \dot \phi^2 +$$ +$$ +2r^2 \ddot \theta = 2r \frac{dr}{d\theta} \dot \theta^2 +2r^2 \sin \theta \cos \theta \dot \phi^2 +$$ +$$ +2 r^2 \sin^2 \theta \ddot \phi = 2r \sin^2 \theta \frac{dr}{d\phi} \dot \phi^2 +2r^2 \sin \theta \cos \theta \frac{d\theta}{d\phi} \dot \phi^2 +$$

+

We can do a simplification here - note that:

+

$$ +\frac{dr}{d\theta} \dot \theta^2 = \frac{dr}{d\theta} \frac{d\theta}{d\tau}\frac{d\theta}{d\tau} = \dot r \dot \theta +$$

+

Similarly:

+

$$ +\frac{d\theta}{d\phi} \dot \phi^2 = \frac{d\theta}{d\phi} \frac{d\phi}{d\tau} \frac{d\phi}{d\tau} = \dot \theta \dot \phi +$$

+

And the same is true for $\frac{dr}{d\phi} \dot \theta^2$. So if we use these simplifications and also cancel out common factors, the geodesic equations are:

+

$$ +\ddot r = r \dot \theta^2 + r \sin^2 \theta \dot \phi^2 +$$ +$$ +\ddot \theta = \frac{1}{r} \dot r \dot \theta + \sin \theta \cos \theta \dot \phi^2 +$$ +$$ +\ddot \phi = \frac{1}{r} \dot r \dot \phi + \cot \theta \dot \theta \dot \phi +$$

+

If you wanted to find the geodesic equations - tada! You've already got them. If you want to find the Christoffel symbols though, that's just one additional step - just read them off the geodesic equations. For example, the first geodesic equation (if we simplify it) is:

+

$$ +\ddot r = r \dot \theta^2 + r \sin^2 \theta \dot \phi^2 +$$ +Compare this to:

+

$$ +\ddot x^i = -\Gamma^i_{jk} \dot x^j \dot x^k +$$ +Note that we have an implicit sum going over the indices $j$ and $k$ here due to the Einstein summation convention. So really, this expands out to:

+

$$ +\ddot r = \ddot x^i = -\sum_{i = 0}^n \sum_{j = 0}^n \Gamma^i_{jk} \dot x^j \dot x^k +$$

+

So $\Gamma^r_{\theta \theta} = -r$, $\Gamma^r_{\phi \phi} = -r\sin^2 \theta$ from the first geodesic equation, $\Gamma^\theta_{r \theta} = \frac{1}{r}$, $\Gamma^\theta_{\phi \phi} = -\sin \theta \cos \theta$ from the second, and $\Gamma^\phi_{r \phi} = \frac{1}{r}$, $\Gamma^\phi_{\theta \phi} = \cot \theta$ from the third.

+ + +
+
+ + + + + + + + + diff --git a/extra/index.html b/extra/index.html new file mode 100644 index 0000000..9734aa5 --- /dev/null +++ b/extra/index.html @@ -0,0 +1,148 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Extra content

+ +

This is a place for extra content to be temporarily placed until they find a good location.

+
+

Quick notes

+

For the elara handbook images - use this template:

+
{image} ../images/raster/fbd-gravity.png
+:alt: Free body diagram single force
+:width: 400px
+:align: center
+
+

Elara UI/UX guidelines: high accessibility, visual comfort, and clarity are the main priorities.

+

Project Elara research papers should use literate programming to ensure reproducible research, like org-mode. They should be written in a specialized markdown syntax with support for executable code blocks (like MyST markdown), which is then compiled to LaTeX and HTML (with the Elara academic theme). Design the Elara academic theme in Figma.

+

Maybe eventually add a command palette/fileswitcher to Elara Hub, and add a Obsidian-style graph view like this.

+

Implement responsivity to elara-ui by setting breakpoint functions in Component trait.

+

For Elara UI also create pure CPU-based backend that uses a Rust-ported version of fenster. Users can choose which backend they want:

+
    +
  • GPU backend is faster and leads to smoother UI rendering but uses a lot of battery and can be glitchy if graphics drivers aren't working correctly, and may not be compatible with very old devices
  • +
  • For low-powered devices CPU rendering is better, but it is much slower
  • +
+

For Elara array first optimize the CPU version as much as possible. E.g. the arithmetic operations should return a view rather than a completely new array, or use clone-on-write. The CPU backend should always be available, even if the GPU backend is faster.

+ + +
+
+ + + + + + + + + diff --git a/focusing-chamber-1/angles-diagram.png b/focusing-chamber-1/angles-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d296cf5cfba9ae367302d859a87a3553c6d7baef GIT binary patch literal 98038 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 + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Focusing chamber theoretical analysis 1

+ +

Note: we've actually realized that this is all completely wrong. The math is correct, the physics isn't. So this is just for archival purposes.

+
+

Consider a beam of light that makes an angle $\theta$ with the horizontal. Consider that beam hitting a sloped wall with an angle of declination of $\phi$. Due to Snell's law, the angle the incoming light beam makes with the wall normal is the same as the angle the outgoing light beam makes with the wall normal:

+

+

We aim to solve for $\beta$, which is the angle made by the next light beam with the horizontal. To do so, however, we must first calculate the other angles, using the simple geometric fact that $\angle a + \angle b + \angle c = \pi$. First, we calculate $\gamma$:

+

$$ +\left(\frac{\pi}{2} - \theta \right) + \gamma + \left(\frac{\pi}{2} - \phi \right) = \pi +$$ +$$ +\gamma = \theta + \phi +$$

+

Then, we calculate $\alpha$:

+

$$ +\alpha = \frac{\pi}{2} - \gamma +$$ +Then, we calculate $\omega$:

+

$$ +\omega + \theta + \alpha = \pi +$$ +$$ +\omega = \frac{\pi}{2} + \phi +$$ +Finally, we can calculate $\beta$:

+

$$ +\beta + \alpha + (\pi - \omega) = \pi +$$ +$$ +\beta = \theta + 2\phi +$$ +We can now say that $\beta = \theta_{i + 1}$, as it would be the value of $\theta$ for the next bounce, and the whole setup would repeat. From there, we obtain the equation:

+

$$ +\theta_{i + 1} = \theta_i + 2\phi_i +$$ +However, this equation continually increases, whereas what we want is for $\theta_n = 0$ as we want planar waves. Thus, we add a small correction:

+

$$ +\theta_{i + 1} = \theta_i + 2\phi_i +$$ +$$ +\phi_{i + 1} = \phi_i - i \epsilon +$$ +where $\epsilon$ is a suitably small angle. Using this, we find that the resulting curve of $\phi(x)$ is a curve whose derivative is a straight line, and therefore:

+

$$ +f(x) = ax^2 +$$

+

Using $f(10) = 6$ obtained from the equation, we solve for the value $a = \frac{50}{3}$. Therefore, the mathematically ideal surface is a surface of revolution about the x-axis of the curve:

+

$$ +f(x) = \frac{3}{50} x^2 +$$

+

+ + +
+
+ + + + + + + + + diff --git a/focusing-chamber-1/result.png b/focusing-chamber-1/result.png new file mode 100644 index 0000000000000000000000000000000000000000..b649351f306048d0a9f2daba7658e38ab5b5b38d GIT binary patch literal 195366 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≀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 z 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æzb_(`6>3n_tZihx3K|fG02~ps2+Yip}rO}-JccwDP%}nfG$<4 zlYE7P6`m=)(pOZ^+rV7E!01`3XheQrcdbgg^9~9P+3?`MrUDFPxKe#wYq;CKedv#9 zXkL&(MI-ue94yS1e5y2VAhb#P;zC?+Z=N(#j@0Qtzb(#)hJX5$H!AM&#?@ zm)nN%&PVmyHM_elRry|B{J7=SYint-_s4L4l+|%$Zt^>Q%{H-$0`n&u)(3A)&w%Tk zy6BdSgw`35m48?5;t}eRpR};()mY;>I%%zEQ=IM`*O@DG_j#ts#q3{S0G8PWg}y^f z3rE8owvWGk->~K{I$ES%36E5tpOYpEfK3BP%m1IrfGkdLN?+N>Jf0Hu>FI&*0}Nw> znXWs~sqU+eo9K)P?l!bploBjGUZj8fc(TT%)-V3W+;&SNoeY<2?s>2DEVNct7QLwkERb^_ zW(AJW1yw3Syo|PP06&Wq`1W<+5Nl0X_hzw?l6jK`-)iZnYCdeg2HJT3L7RlV_2exXF=1B2`XeATG$`pNcS!$( zVc((*11<#ej|Vx;ue#l>A-r#s;9An4<-4N-(TIZ_mVAr($j@k`A3Mszp=F}%Z0nM# zOuOFZ^nw3{_!LBR-jE6{pcaZXB=7bkIi*X|5$PNVgYEtXUI1zO$eqn({G2Ae)=8(Q z_@0ZI$9jmf+DF^4+NVic5FRd6H_GaoZ!T3*Js(;t621j`@Q5_+qvv27|7LfJ#Q90x zF-Mc$CEO~_RA*6YbGvib(cVH`B1XV}lS4Pg%?K4dKbb)M=B19V@`um?;7bo+LP$rG z)gL3-l`d)>tQ_4k281G?PYt)9j>ZO~Isr*XJ;} zv}S4xpIL79Yb$2wDB#H^SD-;|W}It^3t{aZ4kiUAjjDX0;^uJcRE#J0@f;^@M13(` zarjK|zDstuQ17?MQu!{;T9bq+GDJ7Og}?m!6V@8)^M%QiV~Pq@!GWN^J(?!1{~EJ; zV;iqBY^ zb84M`jnT8`v{oIiJP!lblP>-5v^aE$QZe{V8Avw`M25ob&K(3~4XGqTxdL4~y_>W} zvmLh>{A=AJb6bqyV)tE^&9r%%+8Ui^;q|nt4k}p=f5LhkwO#-i^|EbwPgJ~p$B41O z#|PA87NdN6f~#mr7ocjNrygTK44 zPsSygiHckA)4nv~J0SP5_W4S*|H@M0LyOUHree*ndxmFK*5vzDS1~P4!@sDCUQ4_a zCb(%4q}UshTiurLd#Ld&E=>o{>WM@Lvu70T8|0(?EKRwboP4BbDPRbsvDIbq6^O@x^xxY|R`v|fB-L@no0k@P~s>!~ZB z$M*I7QC-jw*S$WXbk@a4=RyTHlg|4Aiu`(}<8+QX;V!7RBx30s=Y}W!cNAA2KWb_C zNiNnC)vJ*0xbefvlz8OOOKA(T7zCE8T6~U{$XRkT8gS(MmkNr3^aQI=mKfM&w{m@cqO{$Wp z@6lAuG;ePKi%zP_^YaL^`@IU8d}M^1-L;!cQL!y?!==4u4Qn>{)Pez+)(cJI zACukCYe)XDSTWq#15R{Kr#BvJUu&}#o6)6Fwm94kKpV_Dua6J>ezj>9^#ttabp9(q zRvEqgC%*c8v+&J&MrbmQG+)XSCFL>yt4*xtfseb%DpH$oA~+FL`Sm|TCMJB~nC)y% z{P4(*n+u3vF6mkOZ0xWw^Wd`t*EPU6A??I0rjht)O<_HjYl%}yAU%%Un$UJM)*v>7 zNhPXdmx{Y7+4+a{fN4!J3N5&vphBns(~3^<<`~w~ST1M19Uw5(ASEs$h+5n?U%upi zfH;7@4I+>?lo+Du_o+rTv)6Wu{FNbKX%?4&4(6yUtU44C48!=Q2Fsa8 zzn?DYIWxWq%{%czZWDALWde%zrsE`8!J|h7H>Hz4KbyV0LT%bPS@LY zP4biAcZZ5SQ!_IkmPsVLe-hq!XlUbX}0iQS_e#x2p3~1kpq+q;K#3Tke*rZ!VVrN4mAeKg~9|rY{qv=nt& z45Opuua5xAia^Pc4-%_Lc(*0)ow60+Gxx@%wG!$6717iq$>b!UQ$OZzhfVSh;aY5T zd_r8psT4ZgR_|@PSua6Cg51pXO`DN!W38CJ8I?ULSYS_o2PZyo)Cv=#ui7Ug$vgbU zIZrxOMa?e4#?{wv@9n)${VwQ!-W$LPlr=5=IM~KwcW;d`lV;^$R(@KN> z%O&7Yw;dHSj0J8(!)j}o?)y~J*(_naLx>7cj?T1E({=8s)Uz%%aSrwq#$vB zQ=lK*LiCSEZ8<`B#e!xXEci^_=jsY0yEADW6k-9p>(|19X6#R`i*%}-B28AmEqCfE zeDNFC*7(FK-b*T{a5?&n{zb4RRH)=c5#yMxGkba{R%{aD4?KC6IjX}ISZgyl zS(J~aFIz+UP~Hi18l!k3*^e45!wphMPpOzti}%nb<;oH;;4ibX@&4- ziIygBnFh&?Vo8HCh?Fu~!cOJ&fPq&2aes{fg<}|9pt+hpbyYsJmo*R^!u?TDCm?YN zg7-WRmpvt*Gs_q&7F1i~6pfLOVsRqhO3ymy@?Y*^#wC~H`XuTNWAoF;OV0yg3KhVA zw$pdU)N=6#lR1``QjWS=on2AyPosaooH})H^oIkh{i{}L(^6u0_PohY2R3o=uiN8a z^#Qg*dgphvK$tl^?vm+9&lopUm<(R?%}LRkqkg9j>H87^yEt3)4kQ&p5zi8u$N1&} z%i_^G5XArVCZ-!Q-pWz)k@FO@R#zBTK$6<(CSI%0PkS^2HGMo9;HRyvQ5->z^xNpZ zHsnYM7cwWOjSQwri2~^a^wwb`$nD__JG`sTL8e{S0|Ni*Ds?WLR|ZIlD@L^C)NGAO zf_twZOdS_Ax&J_ygVQ<)pKF| zNZ|J`KS>(I;w~5~P|{7M|^+1CF}c^jz)GR61-<|-Wlggv3bN_ zzPxK|U}OQ)zsOY7=5bCkjW~Y#**iV3JYS~bDlO{~-6*+Mm;jJ_yWZmiDn`H*c^uQK zt7pF=xGSv`ez$7GyQoJGBu?NzC3lk8Jl*D-b4GH(_~ZMXV$HCk9@u13>s3FtPFVzf z$1@%;O*}?w)p#aw`sJ}+eMACQ;P9#as8o$N8*snM%76Fl1%$bzG$I*3s#Ku3)fj1j z>P?fAOmjjOOe~A&FTUP$Sq>NM(Eb?vF%_HOsvPZ`qoJ&7zNVUe++Pc5JZU!ONTzkF zI&iL)G8+7mcjRv_etZ4LOKVTeifzLVZIQ?snUScJi_zUZK7r`W4l>y85r;%u2#w{$ zInD%%aeh1awq0hpWL3&`{W~L(hrj_9%t7kQGAJ(@5(=+Wq^L!TA}>mVovW3j%`S01 zIZr(?NfVaUNP#nW(D~r(x%kXXPskrupxp2^1{hFPIP24c^eVnHTy1PnN z7}Nt}CjvHm4n_1uQriaqZJi{2=Zrs1wzf&aKjeVNG-Ul=y=p$AwQ7A|Fsi3_ET!z9 zxJM~~=05k$Gkiqn3=-1!bI62nNb_rKG`rWlU8xC5_5crE)t&>y@h;%*rk))Bs9&S& z-e&PzgEF*jF!Qh2rho`n#ClPe%BS%lMH>zB0O~RH*d34}QEz>9O^0Ao#nIM8{_@Ay zHy09gmd+3{!JvXSuTexxjW=yz!kLPphYUArR+L;;Ji%X0=5#HX%x{48L%yk@Z z(FmhQrZf{QAofO{M=|r>Jd~>|$sF#e-yD1lEMGxPd||#EFu_NB;PXh>U@kQE0pLMQ zt#_xoT&`kb)LSY!#V~Q<%+GV5_hDXMi)l~TJ8=Z6?~#Tht8mNk*Dj1$Lov0G-MSF; zn4r0VK!p?Ab9VhL_3%&9aPvEu8?k86Z)Uyar{YuMx{8Q{OiPw>{mo}`0lTSfVq8w722mHYebfdaQbw6C~Fw0%A8r<5#(9L(k#W`uo>679j z@Y<#5@2K%L3hAX^8d7lRINwc=XYun&pVr)2NDS+`Mo4QeJ%lq|Jmf6z#{gQh-qC)>R1GtxLdhY9@jrp z?s$v{&J48W*VV%sh!~BJW{+1nY_b`0PS*>M>qifp+=L>(W=go1cHr*EzEcW44bo*P z@d7&_kVrY_;Std60Guk;qo`BIk^992KC!BLNCE=cQYl#1QTolgOQ;xbYt+kZX==RM z?Xerg*iuy!v@;{WJr`JHY{^U6y9$SZq@! zTZ-1#Plk#21z}FQP9wa1eHLDY>L;wQ;&rhD=0A{q8Q@>=J0)=A8!mmV_FgxUF0QT_ zaBdPfXu>wx;1`Lh`@?rpVE-`db^44KGxFqz@)y4%768|2>nD+UBK~I!F0#_zoo}|w zO9BR=Fi(@5NgdhE$1}$3hb&@FmQ!Pn9@Z1VZTpXB&MV3|%$a&r6<@l+>IIwk+dGje zed{7%G3XL^SN5450QBx$7`QbCFoRdR`5Gv_i_Ag#jQX(+;jz>oX=%QY*H8n6xxfTT zqwd!w9L3*%4kGN@ZiT-D8J#&i!M2&I;q+lU{*+79D6t^VQbw)WM)Fvo{5X!LBO5IA zn`oxQ1?AL8`@W=r)Ye7Vns$4cLcpB8E%5c+9v!AFCMPz3ed{bl=nAd@JNq>n3u+tr zId~@#+v)Q*MWXDVi_fE>b?ccr^hW1y@JyZ0LDVlJj%cr4^&rY!xBuXIPbEw}9MQ)_)RC^s@ z-po≤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 L^F-ybz?A<3U##!( literal 0 HcmV?d00001 diff --git a/funny/index.html b/funny/index.html new file mode 100644 index 0000000..c7b3cde --- /dev/null +++ b/funny/index.html @@ -0,0 +1,130 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project humour and jokes

+ +

"Our weird bell thing" - our new official name for the focusing chamber

+ + +
+
+ + + + + + + + + diff --git a/future-extensions/index.html b/future-extensions/index.html new file mode 100644 index 0000000..94e8a67 --- /dev/null +++ b/future-extensions/index.html @@ -0,0 +1,202 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Speculative future extensions

+ +

The following includes a number of ideas that may make their way into the project at some point in the future.

+

Spaceplanes

+

A new way to create SSTO-like transport spaceplanes:

+
    +
  • Lift becomes insufficient ~30km into atmosphere
  • +
  • So we will design a jet (turbofan) engine that will transition to a ramjet, and then turn off at 30km, and rely on external rocket boosters the rest of the way +
      +
    • A modified version of the aircraft can be launched from an electromagnetic catapult and does not need the turbofan; it can just use its ramjet
    • +
    +
  • +
  • The external rocket boosters then detach (for this concept design they are non-reusable, but they are relatively cheap and inexpensive because they don't need to be as big as a typical rocket given they are given a head start by the jet engine)
  • +
  • If the spaceplane is configured for suborbital mode, then its payload (with attached third stage) is released at this point; if the spaceplane is configured for pure orbital mode (such as docking with ISS or an interplanetary spacecraft in orbit), then its rocket boosters burn for a little while longer
  • +
  • Upon re-entry the SSTO would slow down in the upper atmosphere, then glide, then finally at ~5-10km altitude it turns its jet engine back on to fly to its runway
  • +
+

Why do this? It integrates the best things about both SSTOs and conventional rockets:

+
    +
  • Ability to operate from runways rather than extremely complex rocket launch pads
  • +
  • Theoretically safer than conventional rocket (given it takes off like a normal jet) and cheaper than (non-reusable) rockets
  • +
  • Isn't as limited by payload constraints of SSTOs because it uses lift and efficient jet engines to gain speed at low altitudes, then uses expendable rockets for the second stage - in fact it should be able to carry more payload than a comparable 2-stage rocket given the boosting effect of the jet engine at low altitudes, allowing the second stage expendable boosters to be smaller
  • +
  • It works well with economies of scale, which is the best way to achieve inexpensive spaceflight
  • +
+

Elara-powered vertical farms

+

Vertical farms that use hydroponics for massively increased food growth efficiency, to feed the world.

+

Elara-powered water splitting

+
    +
  • Project elara - using photosynthetic water splitting into H2 and O2 to make rocket fuel (LH2 and LOX)
  • +
  • Idea: ion engines powered by hydrogen fuel cells are used for second-generation elara arrays
  • +
  • Idea: project elara can store a lot of energy for peak demand times by using electrolysis to split water into hydrogen gas which can be then burned to generate electricity via steam turbines and generators (fuel cells work too but are less efficient) and the resulting water vapour collected and condensed during peak demand
  • +
+

Fuel-efficient airplanes

+

These are blended wing bodies with very very high lift-to-drag ratios (up to 600:1). So they can quickly take off to a high altitude (with high-thrust engines), then turn off their engines and just glide to their destination. This allows them to take advantage of jet streams in Earth's upper atmosphere and use minimal fuel.

+

Mass driver propulsion

+

The idea is to have two mass drivers that accelerate solid spherical fuel pellets so fast that when they hit each other the pellets vaporize. The mass drivers would be powered by nuclear reactors.

+

Oberth effect launches

+

For interplanetary missions in project elara, the standard practice is to let a spacecraft perform a powered fall into a gravity well to gain speed.

+

$$ +K = \frac{1}{2} mv^2 +$$ +$$ +\frac{dK}{dt} = mv \frac{dv}{dt} = mav = F v +$$ +$$ +V = \Delta v \sqrt{1 + \frac{2v_{esc}}{\Delta v}} +$$

+

Thus with a delta-v of 100 km/s as can be accomplished with very long firings of an ion engine, then you can get to as much as 360 km/s. That being said, the ion engine would need to be fired for decades to get to actually get to 100 km/s from rest. Thus, conventional chemical engines with a high enough delta-v would work as well, as would a nuclear thermal engine (which should be able to run for much longer and thus have a high delta-v)

+

Magsail in interstellar medium

+

Black hole reactor

+

Non rotating black hole - Dyson array around it to extract mass-energy of accretion disk - can extract 6% mass energy. Method of simulating this would be to conduct an N-body simulation of millions of particles distributed randomly within a defined accretion disk with my geodesic integrator and finding the average particle flux around a Gaussian surface around the BH. Then use the flux distribution to find the optimal placement and geometry of the black hole mirror array.

+

Plan for black hole spacecraft: it will be a photonic rocket powered by a black hole reactor. The black hole reactor uses a microscopic rotating black hole to which a tiny but constant stream of fuel is supplied. A dyson sphere envelops the black hole (which also serves as a magnetic cage). The black hole converts up to 29% of the mass-energy of the fuel to energy - that means 1 kg of fuel would be able to release $9 \times 10^{16}$ Joules of energy - which can then be used to power a conventional thermal rocket or mass driver for spacecraft propulsion.

+

Derivation: the maximum energy that can be extracted from a rotational black hole is given by:

+

$$ +E_{max} = Mc^2 \left[1 - \frac{1}{\sqrt{2}}\left(1 + \sqrt{1 - \frac{a^2}{M^2}}\right)^{1/2}\right] +$$ +The total energy efficiency is given by:

+

$$ +\lim_{a \to 1} \frac{E_{max}}{Mc^2} \approx 0.29 +$$

+

SSTOs

+

Idea is for spaceplane with detachable rocket boosters. The spaceplane uses a ramjet up to about 20km of altitude, then shuts off its ramjet and uses its rocket boosters to quickly and rapidly gain thrust before the boosters detach and fall back to earth (they land with parachutes and big airbags, like pathfinder). This allows its main rocket engine and thrusters to be fairly small.

+

High thrust, high delta-v propulsion

+

High thrust, high delta-v rockets are rockets that both produce enough thrust and can run for a long time, from months to years on end. This excludes chemical rockets (which cannot run for long) and electrical propulsion (which produces too little thrust). The ones primarily investigated are:

+
    +
  • Mass driver propulsion
  • +
  • Thermal rocket
  • +
  • Antimatter rocket
  • +
  • Plasma/other magnetohydrodynamic rocket
  • +
+

Note: of interest also is interstellar magsail designs

+

Methods to reduce nuclear waste

+
    +
  • Fission-catalyzed fusion
  • +
  • Artificial nuclear transmutation
  • +
+ + +
+
+ + + + + + + + + diff --git a/geometrized/index.html b/geometrized/index.html new file mode 100644 index 0000000..af1d3bf --- /dev/null +++ b/geometrized/index.html @@ -0,0 +1,136 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Geometrized units

+ +

Refer to the following table for conversions from the SI system of units to the geometrized unit system. To convert an SI unit to the geometrized unit, multiply the SI value by the first column; to convert a geometrized unit to an SI unit, multiply the geometrized value by the second column.

+ + + + +
Measure of...SI to geometrizedGeometrized to SI
Length ($L$)$\frac{c^2}{G}$$\frac{G}{c^2}$
Time ($T$)$\frac{1}{c}$$c$
Mass ($M$)1 (same value in SI and geometrized)1 (same value in SI and geometrized)
+

All other measurements can be built out of these base units for length, time, and mass. For example, force has the dimension $M LT^{-2}$ , so SI to geometrized would be multiplying by $\frac{c^2}{G}c^2=\frac{c^4}{G}$, and geometrized to SI would be multiplying by $\frac{G}{c^4}$.

+ + +
+
+ + + + + + + + + diff --git a/h2-co2/index.html b/h2-co2/index.html new file mode 100644 index 0000000..421cb57 --- /dev/null +++ b/h2-co2/index.html @@ -0,0 +1,137 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Hydrogen from CO2 production

+ +

$$ +6CO_2 + 6 H_2 O \Rightarrow C_6 H_{12} O_6 + 6 O_2 +$$

+

$$ +C_6 H_{12} O_6 \Rightarrow 6H_2 + 6C + 3O_2 +$$ +The idea is that solid carbon can then be stored, hydrogen gas can be used for fuel cells. And in giant vertical towers full of organisms that do this reaction, mass carbon sequestration could be accomplished.

+

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9915242/

+ + +
+
+ + + + + + + + + diff --git a/handbook-addthings/index.html b/handbook-addthings/index.html new file mode 100644 index 0000000..015fd18 --- /dev/null +++ b/handbook-addthings/index.html @@ -0,0 +1,161 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Things to add to Elara Handbook

+ +

General

+

For the first page, change "learn, develop, or contribute to Project Elara" to "learn to develop or contribute to Project Elara", that wording would be clearer.

+

For knowledge library

+

$W = \Delta K = -\Delta U$

+

Distance is denoted $S$, and speed is denoted $|v|$.

+

"Calculus is the study of the infinitely large and infinitely small. We use limits to tame infinity so it can be reasoned with."

+

In elara handbook's neural network chapter, mention how you can use first or second-order Newton-Raphson method to minimize loss function of neural network, basically solving the equation $\nabla L = 0$.

+

Line integral is like "weighted arc length". The "weights" are the value of the (vector or scalar-valued) function at each point along the curve.

+

Interpretation of parametric arc length - you are taking the speed (norm of the vector-valued velocity function) and integrating it over the enter length of the curve.

+

Add a mechanics section to GR (General Relativity, Part 4 in the Handbook) - it should have things like the GR version of 4-force, GR version of 4-momentum, GR version of Lorentz force law with Faraday tensor, etc. E.g. force in General Relativity is defined with:

+

$$ +F^\lambda = \frac{dP^\lambda}{d\tau} + \Gamma^\lambda_{\mu \nu} U^\mu P^\nu +$$

+

Because otherwise GR seems like just a theory of gravity. Which it is, but really it's a complete reformulation of classical mechanics in curved spacetime. That is - it (can technically) describe everything from electromagnetism to fluid dynamics to kinematics, it's just not usually taught that way.

+

Nice page with physics-motivated calculus problems: https://math24.net/optimization-problems-physics.html and https://math24.net/newtons-second-law-motion.html

+

Add to Elara handbook differential equations section: everything from https://math24.net/topics-differential-equations.html

+

[All about partial differential equations] should be added to diffeq section (for the analytical parts) and developer hub (for the numerical/simulation parts)

+

In an analogy to gravity, the field corresponds to the gravitational force pulling an object onto the Earth, while the potential corresponds to the shape of the landscape on which it stands.

+

A differential equation defines something by how it changes.

+

Horner's method +https://math.stackexchange.com/questions/1356981/why-does-the-separation-of-variables-method-for-des-work

+

For ecosystem

+

Establish the Betancourt Doctrine - project elara will neither recognize nor establish relationships with governments, organizations or groups that have committed, or aim to commit human rights abuses, derive their authority from non-democratic means, or commit gross abuses of power

+

For developer hub

+

Project elara will do open-source hardware like this: https://sr.ht/~jacqueline/tangara/. The open-source hardware will be part of developer hub.

+

Project Elara development guidelines:

+
    +
  • Simple - using minimal abstraction, minimal dependencies, and implementing a minimalist set of features - this is to aid in maintenance and code preservation over centuries
  • +
  • Fast - high performance, low resource usage, able to run on even low-performance devices
  • +
  • Robust - well-engineered and able to handle edge-cases and errors and still provide correct behavior
  • +
+

Each verified project elara app or library will be explained in great detail in the Handbook - the implementations are all explained well enough, and enough code examples are given, that someone could conceivably rewrite the code from scratch following the explanations. This is also why they have to be fairly small codebases.

+ + +
+
+ + + + + + + + + diff --git a/index.css b/index.css new file mode 100644 index 0000000..bdcbefd --- /dev/null +++ b/index.css @@ -0,0 +1 @@ +body{font-family:"Open Sans", "Inter", sans-serif;background-color:#252525;display:flex;flex-direction:row;padding:0 0 0 1rem;margin:0;height:100vh}@media screen and (max-width: 768px){body{flex-direction:column}}@media screen and (max-width: 640px){body{flex-direction:column}}nav{display:block;flex:0 0 15%;overflow-y:scroll;margin-right:4rem;padding:3rem 2rem 3rem 1.5rem;border-right:1px solid #404040}@media screen and (max-width: 768px){nav{display:flex;flex-direction:row;column-gap:2rem}}@media screen and (max-width: 768px){nav{flex:none}}@media screen and (max-width: 768px){nav{margin:0}}@media screen and (max-width: 768px){nav{padding:1.5rem 0}}@media screen and (max-width: 768px){nav{border-right:none;border-bottom:1px solid #404040}}nav .mobile-only{display:none}@media screen and (max-width: 768px){nav .mobile-only{display:block}}nav a{text-decoration:none}nav .header{font-size:0.875rem;margin-top:0;margin-bottom:2rem;color:#F8F8F8}@media screen and (max-width: 768px){nav .header{margin-bottom:0}}nav .header a{color:#F8F8F8;text-decoration:none}nav .header a:hover,nav .header a:focus{text-decoration:underline}nav .active{font-weight:bold}nav ul{display:block;flex-wrap:wrap;list-style:none;padding:0}@media screen and (max-width: 768px){nav ul{display:none}}nav ul li{margin-bottom:0.6rem}nav ul a{font-size:0.875rem;color:#AAA;line-height:1.5}main{display:block;flex-grow:1;padding-top:3rem;padding-bottom:3rem;padding-right:4rem;justify-content:flex-start;overflow-y:scroll}@media screen and (max-width: 768px){main{margin-top:0}}@media screen and (max-width: 768px){main{padding:2rem 0.5rem}}article{max-width:80ch;color:#F8F8F8}article .tasklist{margin-left:0;list-style-type:none}article address,article area,article aside,article audio,article blockquote,article datalist,article details,article dl,article fieldset,article figure,article form,article input,article iframe,article img,article meter,article nav,article ol,article optgroup,article option,article output,article p,article pre,article progress,article ruby,article section,article table,article textarea,article ul,article video{margin-bottom:0.5rem}article img{display:block;width:50%;margin:auto}@media screen and (max-width: 1024px){article img{width:70%}}@media screen and (max-width: 640px){article img{width:100%}}article h2,article h3,article h4,article h5{margin:1.5rem 0;line-height:1.2}article h1{font-size:1.5rem;margin:0 0 1.5rem 0}article h2{font-size:1.2rem}article h3{font-size:1.15rem}article h4{font-size:1.05rem}article h5{font-size:0.9rem}article h6{font-size:0.875rem}article th,article td,article p,article li{font-size:0.875rem;line-height:1.7}article a{color:#38BDF8}article ul{padding-left:0.5rem}article li{margin-left:0.5rem}article li:has(input[type="checkbox"]){margin-left:0;list-style-type:none}article pre{padding:1rem 1.5rem;border-radius:0.25rem}article pre code{display:block;width:100%;overflow-x:auto;line-height:1.4}article .return-link{margin-top:1.2rem}article blockquote{margin:0;padding-left:1rem;border-left:3px solid rgba(255,255,255,0.3)}article table{border-collapse:collapse}article table caption{font-weight:bold;margin-bottom:0.5rem}article td,article th{text-align:left;padding:0.5rem}article tr{border-bottom:1px solid #404040} diff --git a/index.html b/index.html new file mode 100644 index 0000000..6bbc231 --- /dev/null +++ b/index.html @@ -0,0 +1,161 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Welcome to Elara Hub!

+

Elara Hub is Project Elara’s knowledge base and project management tool. Or more simply, it’s where most of the work of the project is done! In keeping with the project ideals, Elara Hub is open-source and developed together by the community.

+

What is this for?

+

Think of this as a mixed community wiki/collaboration tool for the project. We organize things, plan things, write down notes, discuss project direction, and share knowledge with each other here. Everything is written using plaintext markdown files that are then automatically compiled into a website (which can both be viewed online and locally if working offline).

+

The interface is designed to be as simple and minimal as possible. Just read through each page, and navigate by the internal links in each page. The sidebar menu (and on mobile, the top menu) provide another way to quickly and easily switch files.

+

Quick start

+

You probably want to read the [index page] first, from which you can go to any other page via the internal links. The index page is also easily accessible via the "Home" link in the left sidebar menu (on desktop) or top menu (on mobile).

+

Editing guide

+

To get started, first install Zola. Also ensure you have Git installed. Then clone the Elara Hub repository:

+
git clone https://github.com/elaraproject/elara-hub.git
+cd elara-hub
+
+

Within that folder, run zola serve. You should see a local web address pop up - open that address in your browser, the site gives you a live preview as you edit. Then simply open the desired files in the content/ folder, and begin editing!

+

Elara Hub is written in a plaintext format called markdown. If you're not familiar with it, that's okay! Just see the [markdown guide].

+

When adding new files, make sure to add internal links to that new file to at least one other markdown file. This ensures navigability! Internal links follow the format [[File name]](@/path-to-file.md), with the extra bracket differentiating them from web links.

+

Important to note: do not run a production build with zola build, always use zola serve when editing/viewing files locally for live preview. The production build appends the GitHub pages base url, meaning it does not work offline anymore. In addition, make sure your editor is configured to use spaces, not tabs, when editing code blocks! Otherwise they render oddly.

+

The site is easiest to edit with a code editor that has a command palette-style fuzzy-matching filepicker or fzf support.

+

Technical notes

+

All the standard markdown features are supported, including tables, math, images, code highlighting, etc. There is an optional menu but it is not required for reading the Elara Hub, because all pages are connected with internal links. The site is statically-generated by Zola and uses almost no JavaScript.

+

FAQs

+
    +
  • Why no PDF version? +
      +
    • For several reasons. First, PDFs are very hard to make accessible, and are not really responsive. Second, the internal link system used by Elara Hub is hard to translate into PDF format. Third, the website can already be built locally, and the markdown source files can be read locally too, without any build step necessary.
    • +
    +
  • +
  • Why do I see JavaScript on a static website? +
      +
    • The website tries to use minimal JS to load quickly and work well on all devices. One tiny snippet of JS is necessary to polyfill a feature the Zola static site generator doesn't have. The rest of the JS is for math rendering, diagram rendering, etc. The website can still function without JS enabled.
    • +
    +
  • +
+

Important info

+

Everything on Elara Hub is released into the public domain. It may not be patented, as everyone has equal rights to it under law. However, otherwise, you may do whatever you want with it, including sell it (with or without attribution) or use it in your own work (noncommercial or commercial).

+ + +
+
+ + + + + + + + + diff --git a/integration-techniques/index.html b/integration-techniques/index.html new file mode 100644 index 0000000..79f5f40 --- /dev/null +++ b/integration-techniques/index.html @@ -0,0 +1,205 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Integration techniques

+ +

Many physics problems encountered in Project Elara require the use of integration to solve. These are some common techniques for integration:

+
    +
  • Elementary integrals (which are just the derivative rules in reverse)
  • +
  • U-substitution
  • +
  • Integration by parts +
      +
    • Exhaustive integration by parts (DI method)
    • +
    • Integration by parts cancellation trick
    • +
    +
  • +
  • Symmetries: if $f$ is an odd function, then:
  • +
+

$$ +\int_{-a}^a f(x) dx = 0 +$$

+
    +
  • Multiplying by conjugate:
  • +
+

$$ +\int \frac{1}{1 + \cos x} dx +$$ +$$ +\int \frac{1}{1 + \cos x} \frac{1 - \cos x}{1 - \cos x} dx +$$ +$$ +\int \frac{1 - \cos x}{1 - \cos^2 x} dx +$$ +$$ +\int \frac{1 - \cos x}{\sin^2 x} dx +$$ +$$ +\int \csc^2 x dx - \int \frac{\cos x}{\sin^2 x} dx +$$ +For first integral - notice that this is just equal to $-\cot x + C$.

+

For the second integral - let $u = \sin x$, then:

+

$$ +\int \frac{\cos x}{\sin^2 x} dx = \int \frac{1}{u^2} du = -\frac{1}{u} + C +$$

+

So the solution is:

+

$$ +-\cot x + \csc x + C +$$

+
    +
  • Using trig identities (particularly Pythagorean ones) - e.g.
  • +
+

$$ +\int \sin^2 x dx = \int \frac{1 - \cos (2x)}{2}dx = \frac{1}{2} x - \frac{1}{4} \cos (2x) + C +$$

+
    +
  • Integration by partial fractions
  • +
  • Long division of integrand
  • +
  • Expanding the integrand - e.g.
  • +
+

$$ +\int (1 + x^2)^2 dx = \int 1+ 2x^2 + x^4 dx = x + \frac{2}{3} x^3 + \frac{1}{5} x^5 + C +$$

+
    +
  • Cancelling out common factors
  • +
  • Dividing out - e.g.
  • +
+

$$ +\int \frac{1}{\sqrt{16 - 81x^2}} dx = \int \frac{1}{\sqrt{16(1 - (81x^2 / 16))}} = \int \frac{1}{4\sqrt{1 - (9x/4)^2}} +$$

+
    +
  • Completing the square
  • +
  • Splitting one integral into multiple simpler integrals (fraction-splitting)
  • +
+

For fractions:

+

$$ +\int \frac{1 + x}{x^2} dx = \int \frac{1}{x^2} dx + \int \frac{1}{x} dx = -\frac{1}{x} + \ln |x| + C +$$

+
    +
  • Trig sub
  • +
  • Integration via geometry (especially for circles, rectangles, and triangles)
  • +
  • Feynmann integration trick (only for definite integrals)
  • +
+ + +
+
+ + + + + + + + + diff --git a/katex/README.md b/katex/README.md new file mode 100644 index 0000000..25d89fa --- /dev/null +++ b/katex/README.md @@ -0,0 +1,125 @@ +

+ + + KaTeX + +

+ +[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) +[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/main/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) +[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) +![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) +[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) + +KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. + + * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](https://www.intmath.com/cg5/katex-mathjax-comparison.php). + * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. + * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. + * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. + +KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. + +KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). + +Try out KaTeX [on the demo page](https://katex.org/#demo)! + +## Getting started + +### Starter template + +```html + + + + + + + + + + + + + ... + +``` + +You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. + +For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). + +### API + +Call `katex.render` to render a TeX expression directly into a DOM element. +For example: + +```js +katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { + throwOnError: false +}); +``` + +Call `katex.renderToString` to generate an HTML string of the rendered math, +e.g., for server-side rendering. For example: + +```js +var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { + throwOnError: false +}); +// '...' +``` + +Make sure to include the CSS and font files in both cases. +If you are doing all rendering on the server, there is no need to include the +JavaScript on the client. + +The examples above use the `throwOnError: false` option, which renders invalid +inputs as the TeX source code in red (by default), with the error message as +hover text. For other available options, see the +[API documentation](https://katex.org/docs/api.html), +[options documentation](https://katex.org/docs/options.html), and +[handling errors documentation](https://katex.org/docs/error.html). + +## Demo and Documentation + +Learn more about using KaTeX [on the website](https://katex.org)! + +## Contributors + +### Code Contributors + +This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). +Code contributors + +### Financial Contributors + +Become a financial contributor and help us sustain our community. + +#### Individuals + +Contribute on Open Collective + +#### Organizations + +Support this project with your organization. Your logo will show up here with a link to your website. + +Organization 1 +Organization 2 +Organization 3 +Organization 4 +Organization 5 +Organization 6 +Organization 7 +Organization 8 +Organization 9 +Organization 10 + +## License + +KaTeX is licensed under the [MIT License](https://opensource.org/licenses/MIT). diff --git a/katex/contrib/auto-render.js b/katex/contrib/auto-render.js new file mode 100644 index 0000000..0ec4f69 --- /dev/null +++ b/katex/contrib/auto-render.js @@ -0,0 +1,349 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else if(typeof exports === 'object') + exports["renderMathInElement"] = factory(require("katex")); + else + root["renderMathInElement"] = factory(root["katex"]); +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ auto_render; } +}); + +// EXTERNAL MODULE: external "katex" +var external_katex_ = __webpack_require__(771); +var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_); +;// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js +/* eslint no-constant-condition:0 */ +var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + var index = startIndex; + var braceLevel = 0; + var delimLength = delimiter.length; + + while (index < text.length) { + var character = text[index]; + + if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; +}; + +var escapeRegex = function escapeRegex(string) { + return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +var amsRegex = /^\\begin{/; + +var splitAtDelimiters = function splitAtDelimiters(text, delimiters) { + var index; + var data = []; + var regexLeft = new RegExp("(" + delimiters.map(function (x) { + return escapeRegex(x.left); + }).join("|") + ")"); + + while (true) { + index = text.search(regexLeft); + + if (index === -1) { + break; + } + + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index) + }); + text = text.slice(index); // now text starts with delimiter + } // ... so this always succeeds: + + + var i = delimiters.findIndex(function (delim) { + return text.startsWith(delim.left); + }); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + + if (index === -1) { + break; + } + + var rawData = text.slice(0, index + delimiters[i].right.length); + var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData: rawData, + display: delimiters[i].display + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text + }); + } + + return data; +}; + +/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters); +;// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js +/* eslint no-console:0 */ + + +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + +var renderMathInText = function renderMathInText(text, optionsCopy) { + var data = auto_render_splitAtDelimiters(text, optionsCopy.delimiters); + + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + var fragment = document.createDocumentFragment(); + + for (var i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + var span = document.createElement("span"); + var math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + external_katex_default().render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof (external_katex_default()).ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; +}; + +var renderElem = function renderElem(elem, optionsCopy) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + // Concatenate all sibling text nodes. + // Webkit browsers split very large text nodes into smaller ones, + // so the delimiters may be split across different nodes. + var textContentConcat = childNode.textContent; + var sibling = childNode.nextSibling; + var nSiblings = 0; + + while (sibling && sibling.nodeType === Node.TEXT_NODE) { + textContentConcat += sibling.textContent; + sibling = sibling.nextSibling; + nSiblings++; + } + + var frag = renderMathInText(textContentConcat, optionsCopy); + + if (frag) { + // Remove extra text nodes + for (var j = 0; j < nSiblings; j++) { + childNode.nextSibling.remove(); + } + + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else { + // If the concatenated text does not contain math + // the siblings will not either + i += nSiblings; + } + } else if (childNode.nodeType === 1) { + (function () { + // Element node + var className = ' ' + childNode.className + ' '; + var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) { + return className.indexOf(' ' + x + ' ') === -1; + }); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + })(); + } // Otherwise, it's something else, and ignore it. + + } +}; + +var renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + var optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (var option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + // Render AMS environments even if outside $$…$$ delimiters. + { + left: "\\begin{equation}", + right: "\\end{equation}", + display: true + }, { + left: "\\begin{align}", + right: "\\end{align}", + display: true + }, { + left: "\\begin{alignat}", + right: "\\end{alignat}", + display: true + }, { + left: "\\begin{gather}", + right: "\\end{gather}", + display: true + }, { + left: "\\begin{CD}", + right: "\\end{CD}", + display: true + }, { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +/* harmony default export */ var auto_render = (renderMathInElement); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/contrib/auto-render.min.js b/katex/contrib/auto-render.min.js new file mode 100644 index 0000000..74f07c2 --- /dev/null +++ b/katex/contrib/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var i=r[e];if(void 0!==i)return i.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var i={};return function(){n.d(i,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,i=0,a=e.length;n0&&(i.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=a.test(d)?d:e.slice(t[l].left.length,n);i.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&i.push({type:"text",data:e}),i},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var i=document.createDocumentFragment(),a=0;a escapeRegex(x.left)).join("|") + ")"); + + while (true) { + index = text.search(regexLeft); + + if (index === -1) { + break; + } + + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index) + }); + text = text.slice(index); // now text starts with delimiter + } // ... so this always succeeds: + + + var i = delimiters.findIndex(delim => text.startsWith(delim.left)); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + + if (index === -1) { + break; + } + + var rawData = text.slice(0, index + delimiters[i].right.length); + var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData, + display: delimiters[i].display + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text + }); + } + + return data; +}; + +/* eslint no-console:0 */ +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + +var renderMathInText = function renderMathInText(text, optionsCopy) { + var data = splitAtDelimiters(text, optionsCopy.delimiters); + + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + var fragment = document.createDocumentFragment(); + + for (var i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + var span = document.createElement("span"); + var math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + katex.render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof katex.ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; +}; + +var renderElem = function renderElem(elem, optionsCopy) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + // Concatenate all sibling text nodes. + // Webkit browsers split very large text nodes into smaller ones, + // so the delimiters may be split across different nodes. + var textContentConcat = childNode.textContent; + var sibling = childNode.nextSibling; + var nSiblings = 0; + + while (sibling && sibling.nodeType === Node.TEXT_NODE) { + textContentConcat += sibling.textContent; + sibling = sibling.nextSibling; + nSiblings++; + } + + var frag = renderMathInText(textContentConcat, optionsCopy); + + if (frag) { + // Remove extra text nodes + for (var j = 0; j < nSiblings; j++) { + childNode.nextSibling.remove(); + } + + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else { + // If the concatenated text does not contain math + // the siblings will not either + i += nSiblings; + } + } else if (childNode.nodeType === 1) { + (function () { + // Element node + var className = ' ' + childNode.className + ' '; + var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + })(); + } // Otherwise, it's something else, and ignore it. + + } +}; + +var renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + var optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (var option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + // Render AMS environments even if outside $$…$$ delimiters. + { + left: "\\begin{equation}", + right: "\\end{equation}", + display: true + }, { + left: "\\begin{align}", + right: "\\end{align}", + display: true + }, { + left: "\\begin{alignat}", + right: "\\end{alignat}", + display: true + }, { + left: "\\begin{gather}", + right: "\\end{gather}", + display: true + }, { + left: "\\begin{CD}", + right: "\\end{CD}", + display: true + }, { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +export { renderMathInElement as default }; diff --git a/katex/contrib/copy-tex.js b/katex/contrib/copy-tex.js new file mode 100644 index 0000000..2897f1e --- /dev/null +++ b/katex/contrib/copy-tex.js @@ -0,0 +1,130 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; + +;// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js +// Set these to how you want inline and display math to be delimited. +var defaultCopyDelimiters = { + inline: ['$', '$'], + // alternative: ['\(', '\)'] + display: ['$$', '$$'] // alternative: ['\[', '\]'] + +}; // Replace .katex elements with their TeX source ( element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (var i = 0; i < katexHtml.length; i++) { + var element = katexHtml[i]; + + if (element.remove) { + element.remove(); + } else if (element.parentNode) { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + var katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (var _i = 0; _i < katexMathml.length; _i++) { + var _element = katexMathml[_i]; + + var texSource = _element.querySelector('annotation'); + + if (texSource) { + if (_element.replaceWith) { + _element.replaceWith(texSource); + } else if (_element.parentNode) { + _element.parentNode.replaceChild(texSource, _element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + var displays = fragment.querySelectorAll('.katex-display annotation'); + + for (var _i2 = 0; _i2 < displays.length; _i2++) { + var _element2 = displays[_i2]; + _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +} +/* harmony default export */ var katex2tex = (katexReplaceWithTex); +;// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js + // Return
element containing node, or null if not found. + +function closestKatex(node) { + // If node is a Text Node, for example, go up to containing Element, + // where we can apply the `closest` method. + var element = node instanceof Element ? node : node.parentElement; + return element && element.closest('.katex'); +} // Global copy handler to modify behavior on/within .katex elements. + + +document.addEventListener('copy', function (event) { + var selection = window.getSelection(); + + if (selection.isCollapsed || !event.clipboardData) { + return; // default action OK if selection is empty or unchangeable + } + + var clipboardData = event.clipboardData; + var range = selection.getRangeAt(0); // When start point is within a formula, expand to entire formula. + + var startKatex = closestKatex(range.startContainer); + + if (startKatex) { + range.setStartBefore(startKatex); + } // Similarly, when end point is within a formula, expand to entire formula. + + + var endKatex = closestKatex(range.endContainer); + + if (endKatex) { + range.setEndAfter(endKatex); + } + + var fragment = range.cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } + + var htmlContents = Array.prototype.map.call(fragment.childNodes, function (el) { + return el instanceof Text ? el.textContent : el.outerHTML; + }).join(''); // Preserve usual HTML copy/paste behavior. + + clipboardData.setData('text/html', htmlContents); // Rewrite plain-text version. + + clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/contrib/copy-tex.min.js b/katex/contrib/copy-tex.min.js new file mode 100644 index 0000000..5a1ec34 --- /dev/null +++ b/katex/contrib/copy-tex.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={},t={inline:["$","$"],display:["$$","$$"]};var n=function(e,n){void 0===n&&(n=t);for(var r=e.querySelectorAll(".katex-mathml + .katex-html"),a=0;a element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (var i = 0; i < katexHtml.length; i++) { + var element = katexHtml[i]; + + if (element.remove) { + element.remove(); + } else if (element.parentNode) { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + var katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (var _i = 0; _i < katexMathml.length; _i++) { + var _element = katexMathml[_i]; + + var texSource = _element.querySelector('annotation'); + + if (texSource) { + if (_element.replaceWith) { + _element.replaceWith(texSource); + } else if (_element.parentNode) { + _element.parentNode.replaceChild(texSource, _element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + var displays = fragment.querySelectorAll('.katex-display annotation'); + + for (var _i2 = 0; _i2 < displays.length; _i2++) { + var _element2 = displays[_i2]; + _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +} + +function closestKatex(node) { + // If node is a Text Node, for example, go up to containing Element, + // where we can apply the `closest` method. + var element = node instanceof Element ? node : node.parentElement; + return element && element.closest('.katex'); +} // Global copy handler to modify behavior on/within .katex elements. + + +document.addEventListener('copy', function (event) { + var selection = window.getSelection(); + + if (selection.isCollapsed || !event.clipboardData) { + return; // default action OK if selection is empty or unchangeable + } + + var clipboardData = event.clipboardData; + var range = selection.getRangeAt(0); // When start point is within a formula, expand to entire formula. + + var startKatex = closestKatex(range.startContainer); + + if (startKatex) { + range.setStartBefore(startKatex); + } // Similarly, when end point is within a formula, expand to entire formula. + + + var endKatex = closestKatex(range.endContainer); + + if (endKatex) { + range.setEndAfter(endKatex); + } + + var fragment = range.cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } + + var htmlContents = Array.prototype.map.call(fragment.childNodes, el => el instanceof Text ? el.textContent : el.outerHTML).join(''); // Preserve usual HTML copy/paste behavior. + + clipboardData.setData('text/html', htmlContents); // Rewrite plain-text version. + + clipboardData.setData('text/plain', katexReplaceWithTex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); diff --git a/katex/contrib/mathtex-script-type.js b/katex/contrib/mathtex-script-type.js new file mode 100644 index 0000000..d82c41d --- /dev/null +++ b/katex/contrib/mathtex-script-type.js @@ -0,0 +1,112 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); + +var scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + var katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex__WEBPACK_IMPORTED_MODULE_0___default().render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/contrib/mathtex-script-type.min.js b/katex/contrib/mathtex-script-type.min.js new file mode 100644 index 0000000..af02830 --- /dev/null +++ b/katex/contrib/mathtex-script-type.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o,i,a,u={};return o=n(771),i=n.n(o),a=document.body.getElementsByTagName("script"),(a=Array.prototype.slice.call(a)).forEach((function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{i().render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})),u=u.default}()})); \ No newline at end of file diff --git a/katex/contrib/mathtex-script-type.mjs b/katex/contrib/mathtex-script-type.mjs new file mode 100644 index 0000000..1083b92 --- /dev/null +++ b/katex/contrib/mathtex-script-type.mjs @@ -0,0 +1,24 @@ +import katex from '../katex.mjs'; + +var scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + var katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex.render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/katex/contrib/mhchem.js b/katex/contrib/mhchem.js new file mode 100644 index 0000000..8b49131 --- /dev/null +++ b/katex/contrib/mhchem.js @@ -0,0 +1,3216 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/* eslint-disable */ + +/* -*- Mode: JavaScript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); + + // +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens.length && tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + "\\underset{(...)}": function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + "\\underbrace{(...)}": function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + "\\underset{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + "\\underbrace{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {//ret = []; + } else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } //#endregion + +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + assertNever(buf); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + + assertString(res); + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // +// Helpers for code analysis +// Will show type error at calling position +// + +/** @param {number} a */ + +function assertNever(a) {} +/** @param {string} a */ + + +function assertString(a) {} +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/contrib/mhchem.min.js b/katex/contrib/mhchem.min.js new file mode 100644 index 0000000..63c7ec0 --- /dev/null +++ b/katex/contrib/mhchem.min.js @@ -0,0 +1 @@ +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],e);else{var n="object"==typeof exports?e(require("katex")):e(t.katex);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}("undefined"!=typeof self?self:this,(function(t){return function(){"use strict";var e={771:function(e){e.exports=t}},n={};function o(t){var a=n[t];if(void 0!==a)return a.exports;var r=n[t]={exports:{}};return e[t](r,r.exports,o),r.exports}o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var a={};return function(){var t=o(771),e=o.n(t);e().__defineMacro("\\ce",(function(t){return n(t.consumeArgs(1)[0],"ce")})),e().__defineMacro("\\pu",(function(t){return n(t.consumeArgs(1)[0],"pu")})),e().__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");var n=function(t,e){for(var n="",o=t.length&&t[t.length-1].loc.start,i=t.length-1;i>=0;i--)t[i].loc.start>o&&(n+=" ",o=t[i].loc.start),n+=t[i].text,o+=t[i].text.length;return r.go(a.go(n,e))},a={go:function(t,e){if(!t)return[];void 0===e&&(e="ce");var n,o="0",r={};r.parenthesisLevel=0,t=(t=(t=t.replace(/\n/g," ")).replace(/[\u2212\u2013\u2014\u2010]/g,"-")).replace(/[\u2026]/g,"...");for(var i=10,c=[];;){n!==t?(i=10,n=t):i--;var u=a.stateMachines[e],p=u.transitions[o]||u.transitions["*"];t:for(var s=0;s0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(i<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n=0;n":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return a.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return a.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return a.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return a.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return a.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return a.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return a.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var n=a.patterns.findObserveGroups(t,"","$","$","");return n&&(e=n.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var s=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var n=t.match(e);return n?n[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,n)))return null;var d=function(t,e,n){for(var o=0;e":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var n;if((t.d||"").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,n=this.output(t),t.b=o}else n=this.output(t);return a.actions["o="](t,e),n},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var n=[];return a.concatArray(n,this.output(t)),a.concatArray(n,a.actions.bond(t,e,"-")),n}t.d=e},"- after o/d":function(t,e,n){var o=a.patterns.match_("orbital",t.o||""),r=a.patterns.match_("one lowercase greek letter $",t.o||""),i=a.patterns.match_("one lowercase latin letter $",t.o||""),c=a.patterns.match_("$one lowercase latin letter$ $",t.o||""),u="-"===e&&(o&&""===o.remainder||r||i||c);!u||t.a||t.b||t.p||t.d||t.q||o||!i||(t.o="$"+t.o+"$");var p=[];return u?(a.concatArray(p,this.output(t)),p.push({type_:"hyphen"})):(o=a.patterns.match_("digits",t.d||""),n&&o&&""===o.remainder?(a.concatArray(p,a.actions["d="](t,e)),a.concatArray(p,this.output(t))):(a.concatArray(p,this.output(t)),a.concatArray(p,a.actions.bond(t,e,"-")))),p},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:a.go(e,"o")}},comma:function(t,e){var n=e.replace(/\s*$/,"");return n!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:n}:{type_:"comma enumeration M",p1:n}},output:function(t,e,n){var o,r,i;t.r?(r="M"===t.rdt?a.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:a.go(t.rd),i="M"===t.rqt?a.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:a.go(t.rq),o={type_:"arrow",r:t.r,rd:r,rq:i}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&a.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:"chemfive",a:a.go(t.a,"a"),b:a.go(t.b,"bd"),p:a.go(t.p,"pq"),o:a.go(t.o,"o"),q:a.go(t.q,"pq"),d:a.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType})));for(var c in t)"parenthesisLevel"!==c&&"beginsWithBond"!==c&&delete t[c];return o},"oxidation-output":function(t,e){var n=["{"];return a.concatArray(n,a.go(e,"oxidation")),n.push("}"),n},"frac-output":function(t,e){return{type_:"frac-ce",p1:a.go(e[0]),p2:a.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:a.go(e[0]),p2:a.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:a.go(e[0]),p2:a.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:a.go(e[0]),p2:a.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,n){return{type_:"operator",kind_:n||e}}}},a:{transitions:a.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:a.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var n in t)delete t[n];return e}}}},pq:{transitions:a.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:a.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1],"pq")}}}},bd:{transitions:a.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:a.go(e[1],"bd")}}}},oxidation:{transitions:a.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"tex-math tight":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"9,9":{transitions:a.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:a.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),e[1]&&(a.concatArray(n,a.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?a.concatArray(n,a.go(e[2],"pu-9,9")):n.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),"e"===e[3]||"*"===e[3].substr(0,1)?n.push({type_:"cdot"}):n.push({type_:"times"}))),e[3]&&n.push("10^{"+e[5]+"}"),n},"number^":function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),a.concatArray(n,a.go(e[1],"pu-9,9")),n.push("^{"+e[2]+"}"),n},operator:function(t,e,n){return{type_:"operator",kind_:n||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,n=a.patterns.match_("{(...)}",t.d||"");n&&""===n.remainder&&(t.d=n.match_);var o=a.patterns.match_("{(...)}",t.q||"");if(o&&""===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var r={d:a.go(t.d,"pu"),q:a.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:r.d,p2:r.q}:(e=r.d,r.d.length>1||r.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),a.concatArray(e,r.q))}else e=a.go(t.d,"pu-2");for(var i in t)delete t[i];return e}}},"pu-2":{transitions:a.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var n=a.patterns.match_("{(...)}",t.rm||"");e=n&&""===n.remainder?a.go(n.match_,"pu"):{type_:"rm",p1:t.rm}}for(var o in t)delete t[o];return e}}},"pu-9,9":{transitions:a.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var n=t.text_.length%3;0===n&&(n=3);for(var o=t.text_.length-3;o>0;o-=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var n=t.text_.length-3,o=0;o":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"rightleftarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}}(),a=a.default}()})); \ No newline at end of file diff --git a/katex/contrib/mhchem.mjs b/katex/contrib/mhchem.mjs new file mode 100644 index 0000000..7d93825 --- /dev/null +++ b/katex/contrib/mhchem.mjs @@ -0,0 +1,3109 @@ +import katex from '../katex.mjs'; + +/* eslint-disable */ + +/* -*- Mode: JavaScript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex.__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex.__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens.length && tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + '\\underset{(...)}': function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + '\\underbrace{(...)}': function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + '\\underset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + '\\underbrace{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } //#endregion + +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // diff --git a/katex/contrib/render-a11y-string.js b/katex/contrib/render-a11y-string.js new file mode 100644 index 0000000..7db8452 --- /dev/null +++ b/katex/contrib/render-a11y-string.js @@ -0,0 +1,881 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__771__) { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 771: +/***/ (function(module) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__771__; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(771); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/** + * renderA11yString returns a readable string. + * + * In some cases the string will have the proper semantic math + * meaning,: + * renderA11yString("\\frac{1}{2}"") + * -> "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +// NOTE: since we're importing types here these files won't actually be +// included in the build. +// $FlowIgnore: we import the types directly anyways + +var stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +var powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +var openMap = { + "|": "open vertical bar", + ".": "" +}; +var closeMap = { + "|": "close vertical bar", + ".": "" +}; +var binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +var relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +var accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +var buildString = function buildString(str, type, a11yStrings) { + if (!str) { + return; + } + + var ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type + // $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +var buildRegion = function buildRegion(a11yStrings, callback) { + var regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +var handleObject = function handleObject(tree, a11yStrings, atomType) { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + var text = tree.text; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error("\"" + tree.family + "\" is not a valid atom type"); + } + } + + break; + } + + case "color": + { + var color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, function (regionStrings) { + // genfrac can have unbalanced delimiters + var leftDelim = tree.leftDelim, + rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "hbox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, function (regionStrings) { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + var body = tree.body, + name = tree.name; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "pmb": + { + a11yStrings.push("bold"); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, function (regionStrings) { + var body = tree.body, + index = tree.index; + + if (index) { + var indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + var base = tree.base, + sub = tree.sub, + sup = tree.sup; + var isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + var regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start " + regionName); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push("end " + regionName); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + var supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } else if (/phase/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start phase angle"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end phase angle"); + }); + break; + } + + throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet"); + } + + case "vcenter": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString("start verbatim", "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString("end verbatim", "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString("start " + tree.label.slice(1), "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString("end " + tree.label.slice(1), "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "cdlabel": + { + throw new Error("KaTeX-a11y: cdlabel not implemented yet"); + } + + case "cdlabelparent": + { + throw new Error("KaTeX-a11y: cdlabelparent not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + + buildA11yStrings(tree.body, a11yStrings, _atomType); + break; + } + + case "mathchoice": + { + // TODO: track which style we're using, e.g. display, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + case "internal": + { + // internal nodes are never included in the parse tree + break; + } + + case "html": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (var i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +var flatten = function flatten(array) { + var result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +var renderA11yString = function renderA11yString(text, settings) { + var tree = katex__WEBPACK_IMPORTED_MODULE_0___default().__parse(text, settings); + + var a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +/* harmony default export */ __webpack_exports__["default"] = (renderA11yString); +}(); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/contrib/render-a11y-string.min.js b/katex/contrib/render-a11y-string.min.js new file mode 100644 index 0000000..3539b88 --- /dev/null +++ b/katex/contrib/render-a11y-string.min.js @@ -0,0 +1 @@ +!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],r);else{var a="object"==typeof exports?r(require("katex")):r(e.katex);for(var t in a)("object"==typeof exports?exports:e)[t]=a[t]}}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var r={771:function(r){r.exports=e}},a={};function t(e){var o=a[e];if(void 0!==o)return o.exports;var n=a[e]={exports:{}};return r[e](n,n.exports,t),n.exports}t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,{a:r}),r},t.d=function(e,r){for(var a in r)t.o(r,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:r[a]})},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)};var o,n,s,i,l,c,u,p,d,h,b,m,f,w,g={};return o=t(771),n=t.n(o),s={"(":"left parenthesis",")":"right parenthesis","[":"open bracket","]":"close bracket","\\{":"left brace","\\}":"right brace","\\lvert":"open vertical bar","\\rvert":"close vertical bar","|":"vertical bar","\\uparrow":"up arrow","\\Uparrow":"up arrow","\\downarrow":"down arrow","\\Downarrow":"down arrow","\\updownarrow":"up down arrow","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow","\\langle":"open angle","\\rangle":"close angle","\\lfloor":"open floor","\\rfloor":"close floor","\\int":"integral","\\intop":"integral","\\lim":"limit","\\ln":"natural log","\\log":"log","\\sin":"sine","\\cos":"cosine","\\tan":"tangent","\\cot":"cotangent","\\sum":"sum","/":"slash",",":"comma",".":"point","-":"negative","+":"plus","~":"tilde",":":"colon","?":"question mark","'":"apostrophe","\\%":"percent"," ":"space","\\ ":"space","\\$":"dollar sign","\\angle":"angle","\\degree":"degree","\\circ":"circle","\\vec":"vector","\\triangle":"triangle","\\pi":"pi","\\prime":"prime","\\infty":"infinity","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\omega":"omega","\\theta":"theta","\\sigma":"sigma","\\lambda":"lambda","\\tau":"tau","\\Delta":"delta","\\delta":"delta","\\mu":"mu","\\rho":"rho","\\nabla":"del","\\ell":"ell","\\ldots":"dots","\\hat":"hat","\\acute":"acute"},i={prime:"prime",degree:"degrees",circle:"degrees",2:"squared",3:"cubed"},l={"|":"open vertical bar",".":""},c={"|":"close vertical bar",".":""},u={"+":"plus","-":"minus","\\pm":"plus minus","\\cdot":"dot","*":"times","/":"divided by","\\times":"times","\\div":"divided by","\\circ":"circle","\\bullet":"bullet"},p={"=":"equals","\\approx":"approximately equals","\u2260":"does not equal","\\geq":"is greater than or equal to","\\ge":"is greater than or equal to","\\leq":"is less than or equal to","\\le":"is less than or equal to",">":"is greater than","<":"is less than","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow",":":"colon"},d={"\\underleftarrow":"left arrow","\\underrightarrow":"right arrow","\\underleftrightarrow":"left-right arrow","\\undergroup":"group","\\underlinesegment":"line segment","\\utilde":"tilde"},h=function(e,r,a){var t;e&&(/^\d+$/.test(t="open"===r?e in l?l[e]:s[e]||e:"close"===r?e in c?c[e]:s[e]||e:"bin"===r?u[e]||e:"rel"===r?p[e]||e:s[e]||e)&&a.length>0&&/^\d+$/.test(a[a.length-1])?a[a.length-1]+=t:t&&a.push(t))},b=function(e,r){var a=[];e.push(a),r(a)},m=function(e,r,a){switch(e.type){case"accent":b(r,(function(r){f(e.base,r,a),r.push("with"),h(e.label,"normal",r),r.push("on top")}));break;case"accentUnder":b(r,(function(r){f(e.base,r,a),r.push("with"),h(d[e.label],"normal",r),r.push("underneath")}));break;case"accent-token":case"color-token":case"kern":case"leftright-right":case"size":case"infix":case"internal":break;case"atom":var t=e.text;switch(e.family){case"bin":h(t,"bin",r);break;case"close":h(t,"close",r);break;case"inner":h(e.text,"inner",r);break;case"open":h(t,"open",r);break;case"punct":h(t,"punct",r);break;case"rel":h(t,"rel",r);break;default:throw e.family,new Error('"'+e.family+'" is not a valid atom type')}break;case"color":var o=e.color.replace(/katex-/,"");b(r,(function(r){r.push("start color "+o),f(e.body,r,a),r.push("end color "+o)}));break;case"delimsizing":e.delim&&"."!==e.delim&&h(e.delim,"normal",r);break;case"genfrac":b(r,(function(r){var t=e.leftDelim,o=e.rightDelim;e.hasBarLine?(r.push("start fraction"),t&&h(t,"open",r),f(e.numer,r,a),r.push("divided by"),f(e.denom,r,a),o&&h(o,"close",r),r.push("end fraction")):(r.push("start binomial"),t&&h(t,"open",r),f(e.numer,r,a),r.push("over"),f(e.denom,r,a),o&&h(o,"close",r),r.push("end binomial"))}));break;case"hbox":case"lap":case"ordgroup":case"raisebox":case"sizing":case"styling":case"smash":case"vcenter":case"operatorname":case"font":case"html":f(e.body,r,a);break;case"leftright":b(r,(function(r){h(e.left,"open",r),f(e.body,r,a),h(e.right,"close",r)}));break;case"mathord":h(e.text,"normal",r);break;case"op":var n=e.body,s=e.name;n?f(n,r,a):s&&h(s,"normal",r);break;case"op-token":case"textord":h(e.text,a,r);break;case"overline":b(r,(function(r){r.push("start overline"),f(e.body,r,a),r.push("end overline")}));break;case"pmb":r.push("bold");break;case"phantom":r.push("empty space");break;case"rule":r.push("rectangle");break;case"spacing":r.push("space");break;case"sqrt":b(r,(function(r){var t=e.body,o=e.index;if(o)return"3"===w(f(o,[],a)).join(",")?(r.push("cube root of"),f(t,r,a),void r.push("end cube root")):(r.push("root"),r.push("start index"),f(o,r,a),void r.push("end index"));r.push("square root of"),f(t,r,a),r.push("end square root")}));break;case"supsub":var l=e.base,c=e.sub,u=e.sup,p=!1;if(l&&(f(l,r,a),p="op"===l.type&&"\\log"===l.name),c){var m=p?"base":"subscript";b(r,(function(e){e.push("start "+m),f(c,e,a),e.push("end "+m)}))}u&&b(r,(function(e){var r=w(f(u,[],a)).join(",");r in i?e.push(i[r]):(e.push("start superscript"),f(u,e,a),e.push("end superscript"))}));break;case"text":if("\\textbf"===e.font){b(r,(function(r){r.push("start bold text"),f(e.body,r,a),r.push("end bold text")}));break}b(r,(function(r){r.push("start text"),f(e.body,r,a),r.push("end text")}));break;case"enclose":if(/cancel/.test(e.label)){b(r,(function(r){r.push("start cancel"),f(e.body,r,a),r.push("end cancel")}));break}if(/box/.test(e.label)){b(r,(function(r){r.push("start box"),f(e.body,r,a),r.push("end box")}));break}if(/sout/.test(e.label)){b(r,(function(r){r.push("start strikeout"),f(e.body,r,a),r.push("end strikeout")}));break}if(/phase/.test(e.label)){b(r,(function(r){r.push("start phase angle"),f(e.body,r,a),r.push("end phase angle")}));break}throw new Error("KaTeX-a11y: enclose node with "+e.label+" not supported yet");case"vphantom":throw new Error("KaTeX-a11y: vphantom not implemented yet");case"hphantom":throw new Error("KaTeX-a11y: hphantom not implemented yet");case"array":throw new Error("KaTeX-a11y: array not implemented yet");case"raw":throw new Error("KaTeX-a11y: raw not implemented yet");case"url":throw new Error("KaTeX-a11y: url not implemented yet");case"tag":throw new Error("KaTeX-a11y: tag not implemented yet");case"verb":h("start verbatim","normal",r),h(e.body,"normal",r),h("end verbatim","normal",r);break;case"environment":throw new Error("KaTeX-a11y: environment not implemented yet");case"horizBrace":h("start "+e.label.slice(1),"normal",r),f(e.base,r,a),h("end "+e.label.slice(1),"normal",r);break;case"includegraphics":throw new Error("KaTeX-a11y: includegraphics not implemented yet");case"href":throw new Error("KaTeX-a11y: href not implemented yet");case"cr":throw new Error("KaTeX-a11y: cr not implemented yet");case"underline":b(r,(function(r){r.push("start underline"),f(e.body,r,a),r.push("end underline")}));break;case"xArrow":throw new Error("KaTeX-a11y: xArrow not implemented yet");case"cdlabel":throw new Error("KaTeX-a11y: cdlabel not implemented yet");case"cdlabelparent":throw new Error("KaTeX-a11y: cdlabelparent not implemented yet");case"mclass":var g=e.mclass.slice(1);f(e.body,r,g);break;case"mathchoice":f(e.text,r,a);break;case"htmlmathml":f(e.mathml,r,a);break;case"middle":h(e.delim,a,r);break;default:throw e.type,new Error("KaTeX a11y un-recognized type: "+e.type)}},f=function e(r,a,t){if(void 0===a&&(a=[]),r instanceof Array)for(var o=0;o "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +var stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +var powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +var openMap = { + "|": "open vertical bar", + ".": "" +}; +var closeMap = { + "|": "close vertical bar", + ".": "" +}; +var binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +var relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +var accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +var buildString = (str, type, a11yStrings) => { + if (!str) { + return; + } + + var ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type + // $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +var buildRegion = (a11yStrings, callback) => { + var regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +var handleObject = (tree, a11yStrings, atomType) => { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + var { + text + } = tree; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error("\"" + tree.family + "\" is not a valid atom type"); + } + } + + break; + } + + case "color": + { + var color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, regionStrings => { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, regionStrings => { + // genfrac can have unbalanced delimiters + var { + leftDelim, + rightDelim + } = tree; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "hbox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, regionStrings => { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + var { + body, + name + } = tree; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "pmb": + { + a11yStrings.push("bold"); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, regionStrings => { + var { + body, + index + } = tree; + + if (index) { + var indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + var { + base, + sub, + sup + } = tree; + var isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + var regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start " + regionName); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push("end " + regionName); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + var supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } else if (/phase/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start phase angle"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end phase angle"); + }); + break; + } + + throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet"); + } + + case "vcenter": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString("start verbatim", "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString("end verbatim", "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString("start " + tree.label.slice(1), "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString("end " + tree.label.slice(1), "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "cdlabel": + { + throw new Error("KaTeX-a11y: cdlabel not implemented yet"); + } + + case "cdlabelparent": + { + throw new Error("KaTeX-a11y: cdlabelparent not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + + buildA11yStrings(tree.body, a11yStrings, _atomType); + break; + } + + case "mathchoice": + { + // TODO: track which style we're using, e.g. display, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + case "internal": + { + // internal nodes are never included in the parse tree + break; + } + + case "html": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (var i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +var flatten = function flatten(array) { + var result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +var renderA11yString = function renderA11yString(text, settings) { + var tree = katex.__parse(text, settings); + + var a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +export { renderA11yString as default }; diff --git a/katex/fonts/KaTeX_AMS-Regular.ttf b/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c6f9a5e7c03f9e64e9c7b4773a8e37ade8eaf406 GIT binary patch literal 63632 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_AMS-Regular.woff2 b/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910 GIT binary patch literal 28076 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 G2<`xUL{2yW literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f522294ff0f3f8c52dfdaef7ebfaa06ebfcfaabf GIT binary patch literal 12344 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 Mepdy)y#Y}F4=Hd9=l}o! literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f GIT binary patch literal 6908 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 CFgb+) literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.ttf b/katex/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4e98259c3b54076d684bf3459baeaeae8dbce97a GIT binary patch literal 19584 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc GIT binary patch literal 11348 zcmV-aEUVLZPew8T0RR9104!7h4gdfE08HQj04x0f0RR9100000000000000000000 z00006U;u#x2s{a#3=s$l=RnhY0X7081A=@Dfj|HRAO(ni2ZA6BfhQYjK}92Ka2^Ov z0o}VqRBm=p{=X$q8M1cpbPUxS0!WG`C@4;IjHc?u&;+W>o%jXepM@BXgT+(Np6`yc z(p7IC8)x~5s#)!;6hBM!$6i|TH+G!ojgVxvwMV<>f6hrZ$wC)-SGcn~DA9)}RnL-z*RWekuPpCacmiMm2|#%vBmjodga!vtbS#zLV>nN#tH3xi zx24vQ-W{9R6oCZDJ)7svwFKw8dX5Ertxp852kD0_jPpq2rl)~lVfgktpU>?)kvu~$F8*Uz4iS< zmZ`8fx#t%{j6voQKRzWm;NI(ozQ zRm@Vm{LZwtM0X_?gs}l%&k&q{rMmnT*ngRw@8cYK!5!Jtxe+7lX0q?RCzcT7q#Hmo zE^0*r(`sIkAzpk%0rZDr=EenWnI~e@!ZWRw4&5YkdjWbzW}AA-v&Fz&U5v^$^*x^x z9D>=4oA;0hM2CEuwmS(iI~>@Mq%N%>10q;tU~LSNM4`9p(1S0Dl=;`tIgN5W8&hou zPvN%tJA4SbyjVH=tj?w8eUoobL6Wf2ZzU|Nb`mB zLywc}C%gcA(M%|66)j*4 zN>4qgxgPdPQyNp}{kMs#qQYEb2*2o#q5yL_>0DrUx>q|qT5aF))`^^cJ(QyK?sdw% z5#qW_n-;{pfuk=23r9`Do^BO2Xmd1xLk(tW+f+cT*Gc5gob;BZZcmO401gJ6ok>~S zr*F>a%7h)e=@U5^>@gWP)+L`j;MOKn(o>Y95bLohJz|{O74(Qp)Pk~v=`u&7Rz~5H zIz5}?SCMA>K}5qD1k9-?JM>3HY_A9J#M_dWNQlB++g$JUDn^)0fD`gdC3@zY8lw!H zYeg}GSS#YlJSonktjp~RV@BlFsl@t<%m=O8(LX z6y&&L=2R7_DC01Vw*UGr7d?L}=bU*|n1oeZ%4#CHW_$Z670 zH|hjzE@6De0$j6>L}KJGrL_Ininvg~+uMOTQ;Zpy(l=72h^OU+ixSHSHRP_aEKc0k3BsMrY=JELM3 zRP2g6(GzHr7J7vu%N1HXL>pFJOZMb#q&L_r*sC4(Ngn`HL^LmHSz7nGO9@8+^fgxb z67+4et`qyTi(?%L%ignifXMoovo zDa~GAqTo;v$#-c_OTXhqpS*Z7mM%vJxu*e59{jtNVHwmar>RU!IN<7TB|7>%97?^a zPWk!jl4)mKa){in)E>$tQnAj8*x?xiQxnP93oWKT>XmeIEMjL@w_Gj>2HItrq-7^` zI2p8ThlX|;F%u%Vm?8!wXL)++7IY}HCB(T+?FU93;}J;g zL>%SRb$ecz{m~HAL~75Iml)RFrUf)sm)>b+u64tc|j$3wC$s4>ay3Sn|4k~+;9d0-X>U=pxEkpL2fP$mdP4u7ID0UCu+Cj<=~ z66q5(6~H3VA`a#*8$nq)teS8S?Q7GE;LD$iX58Wf=pk7LZYlYjtp=j@Sz0 zfV;#2_A$UA27cUojVIN3R*e_ccufen#Q^sh_yc-_Pc`^bgKstXNeKAH0KXU}{v`am zU$;w9Ef2D*c>W;Xc{3f+)D#=*iypg8H3a3Nk)h0quG04cx||21OQ86Tlj+4iUT2R8 zo$pTh(whLV-@r*4&-Dj8j$14?y@E8_ z3u)|cq1PMWk8T6VmXP8gDDVF1q}kn3V1Yjad}-$aba;m zr!kQ#MD8v53!c31`Olgkj|rrt5*{ZhG+q)xY0~miDzUri^|hg16<-KumAQqHDgzZI z&o@UE;IJ&v!=)IqNZ;8R>njNyi9S+EdJ$n#kGVimbQ5usVQ)+dIf-8)m8b&1IiNI6 z2Q{Lw=K?#iFr`???bmT(yktyOo#J%U?x`~$TeA<&X0CZ_rP2C*+i7af+&`7Qb+*9Er%^4^6VIy^oewME%bP1f=|h20lY?Ih{0lS`T~|aAmI~ z&V9)5_)@OiQVRSE19I8nz(JqNkarcO{*R`3bk9W@C}nQyDgMRZf8O*3e&$1oVJFU7 z&a^~u8nGb!0Wz%sp6^!uU*lv^C2h5%rwi^CMud^h#YX}irAi8ZWdkbU>3b(mtOn(w zEN{Y4dTFF$s z3dn;iza^VJkQZ_D2MgqINxxJoD$$$d*)3uCP6S zCX~EjSPa*2W~pV2nzQC$Tz{w3{)SNG=a=`vu)2vT0PE#i2p6PUbrdfIw#!!4x%)`Z zU9qajna@(YNplbxj0a`{t5=l^ABncoKifv5k*JI;Y8lUAq+(Y1{EjoM$hC=LVMwb)(vzMiFM=CFeHy z`wM|=yDabV8I$TfVJy0NkcRfCl0U&(1OqJYDS~kt))t`GuY$cl%K!WGF zk;t0Nj0R-U#vkgnLTn?q3#heT{!rfJk|lbU9beJvgg7#&f05aj2k~z+vfOsOaf8if zg*yrB@^$yxr)O z85L|=+UF2qT;_|x`g?0AQ#KvNzM9uU&%u8=C2*t`dR^}wmT?(%Efjz1 zqV|ZE$5q{?)^)7Gyvf6p6P(;?eAAfV8Dv?TA0Ae{yvHzO5U-m*r)3*bCH_&$5J7Dxc7My#z6S!LA2gv4 zqP>$1zvG7+yA++Pz3bv)_)C=5* zo-F_$yDw>k$9T$pVvW4R6hIQvjejViY5b!#=_Z2z z?hjRQ;O8&x#hjavbVQEct^RLIweFBJ$UdWHuAb@;Shy7DMUo54~yHPEsJn9 zlv%M6ffvxf+w8JqF4NJjQ`+4lIZ3Ehvm8$R5#Em@93uzsa^*Ys?0eKCuBGw3yKPzx z@2IO)w~NWk@)o<1cO<$}vh$qOGblK4)(M&WmFb&pE2Y~z9T!*@wF53&AqXJWNnT=N z=mYs3MgPNueoxXV(bJ&#xk-n~zz9hGV}bVcBAQqg0F*!unDZK|6pO#r4NU1+22Te? zXh#n%itXb9jUTRbP8eMIif=bcIy30DwW`Igfr4WcAu>1$blj13hHXnXo2tXU?Ja}=wMVGv>xRYnAAlcF>Xem7r7=A1b*pnc3{jQ578{wO6BQ@ilAsRRzJ814ql6nNft9pRxGC z-HbYVX5(gxtz4Vp{0Ff8hb#AxN4}2LmKA}KyE$+QZJa=9&R$}ldVxchXdsuW%A%bb z4w;mcz3+MKko+#oN(%zd<>VL+deXgDspQlQjGQ%e^fyAkEo|{DdAFPwe@M;HVaBoW zojyoHabdHb-(_i$xu*_s;^*I0Y>d6BYc<*vyj9~ey%sUFHg}zkh3O?Nh`rIwGT8SZ z%wA$T66%{{>5Wu$@llJG47_j2m~NMVnzF+~1&2zrCR^sAj&>e(PYY`Ejar45c!n`| zy0>yTl=KA#2hr|
8iJi9&VuLl!D?|!}g_M>mOF8Np9hD)!Z1Vi=)NUxj~3huD& zyD|QQ7aI3(({H9Q#J{MlFEJmW^?D~ilCv^kGW^DwJtrX3%3lmPoqYMX$D{1PT>tY- z7&&?qIxCZ(mgn?cQ!37X+$}o(Af39P0>$~7j7f4p+>@Bi9aIj#bOl6-yFQA)naIV7 zp$RaqtO$JzbfPI|iDvvTz%%DZQ;3nI&&ZQvm|GrhS*E--9kMD12pHQ#GI%oy(ufJBQy}WA%+Fg zb{2gTOV|l#(Lp}SWgvO9bUmv48C28iNlXJO5*Z7kk&Cq+N*F$xAJ=R_wbAzj?a!dz z-1?v->KqkvLsOb+HZ+If1+3D6_rR|Lnpd@k|!GPWpb*j{dYXDsT;!&wG%w50@ z!$X2~O&VXQJ!?yxp6*gdc{-qUj^BC*;N4J)Ap{)5$EPb_8sZZA1HK0TH zdTmQk%mOe(F9JU#xBiL!jtTtjOY^dtP;*s{(b(A-qIV`0!Jw}0_{d;lEa@IU>z=9) z^uB3N7mQcy+b?ODY%5#hF(*89hX%5&Euu@f`sUi3jG9dwZF3E(gnRk33%cgDzear= zWK`GHf`>oYT;+2ubmPA&_iFX&PMZSM_+BiZ!Y-#A)*YdckLV7A8r~8g&K+l_Hwyv=a@c>BAIeuPD-ZnjuA4f}pR1E_a3AMFiQ8NasIL{hQ`(;ge= z4?i+&@?@`uvRXQbQl{QpgQ`9m*KK&^Mj1?5Lt$8Tb^d-$Qa5ws_j*=s;2BhiVj`2k zxMy1n+lpghTh;B*nzq*572+(t(wmG7Wl|D|yJHKZNnx?)75o0Ad8(V5Ok{}KKeZyd z9F1<*mPPOxt^jp`MBXAna0f`$#YP+b#`o2U_h?M!Vq&T4&J5gHzO^~h5?NZ#8>-Om zZ~cmMsXj26*%22f#S87gEGzj64&|vZ5^Hy9w>(q%E?uCpqGF;gnP4{b;+~MrqA6&d zoN0?S2EY7pq&ewXKJM-9Nl$wuE%f6WBQfzzTb|g^m1KRg?R^}!y@zTATAup?28~xP zr>jSbAWtz|Clz(Qr%8&3I0qROxN01)nYeLhc}ty!xV80)dQYQ&pm8?KtM#e|t9G|l zZ!0JDNMUaX7IE{WMeu~yU5Tf%7mZKVNsj*_0&_&dzdsiD=4yR3z zF7cDlC-JBYm0daq!H1#XmXX-|%XOdzD?)qcW#)^sJ5CXYS|P%wsFAYMscIlE*@=qw z4>eN#=+(b;3UPS1?#5tW72J+)Bx|IAB2@mhpOGrLNa0c1jP!xXoA)mE`5t}V6+g)B zbEh1QGclhnI%a2W417rsuhJ$mvN^_Hi8-P62X~url|=r2Fz4o;XK^lWIJk93Yc`rq zyBsaeLBSRYvNWFm;)`FV@2&)87VKZMk;88Ni7{*tq7;AJY7+TgsfC~7HhwzeG$;fX z`O6_sW)s>HR~cvqb6cG)Ef@C?Uz**!Qa+e>ZV*>_P;32h$bdqB$U5hRu*zOp4P}@L zMIM;~XxTo~8?6)dFpY3#g}JJr=)1*kmBC2i@lTov$d4CMw`GoIy-z_N1+h(AOJQp$ zOl@sAQ?;U2r4hlWnC&-qjMW&#pw>ogkFuZI;IOhJ6lfAcJ|Q(mHB##476GHV*o5#Z%vGnF>1Xa@muz^z5<@=U3j7k#$?7u*F?=&_}7ehUv$4lqTF1 zdrNPsJ>_*@sTc%q?ZfNU8*X#dbvZ@h2s5b{<5(4YQwb;xO#v;Kf zg00+UVhKk!Do1#9jLotBAOB%*>3|8QKucY+D2ujP?mHgn@RFKU(1v1yQh_)s#cfBG zLTp7syF{)sYb5;I?IIZ9>Gz!J_Vs=jx-p5I7b82hc!NPVPkqBOad;nzMv?qm8lBy0 zohsY-==OIY@}u3v{(Qfgwi@O9mkuL~{IBzNMt3~idRN3h^1b5c_N$v8`>ewR75pXq z&sy^&2W%&}Ce4g;R)U0kZY!R=>g;)#gU-cw^^#G&&&}A3rVjmNYpvf=VO`kKO@3#~ z)haw@4B-`|-BApsAm4f{=VKIe3s7n!-!H7$^3w93-x2|^~2?L z&&?!?^hR~84mnDoHSQm#q;Sr*UMKBq5=y+6j;UTBXfSZthyo(fa(cYc*%fH`e!p4f zz;dKb;lpJJ(s-=|;5HyHWOj4$Crb-$cV1acqn+w1TrIH&32DP(|DfC4t&H)_+E)z% z-H0{bvkaWop(xr=RV;^=uA6yplmq>s&{9uj8N5$gPH4RZE8XL(zGkGRkzTSLB*i%M zVH6zj_o@|v;{@Nu2+it@eXLJiRcNpkceyY>!)KO>?bbFi@r_7zLp*r$14u7Cpso%R$kdP;Bd3b(%3C-a7Z;+eQ8<| z`Rp`L4Cht<-+5F(BMUcgfeR(KUbQ=vNq^3+3WyKv6I!foG>L%TA_##3IZI5}$m)QL zk&zzgt80yI5=P)&#((_kF1<^Bk%N?*#6m^d{qOUOl4wob=z@Nfx`1*g{DyRMcyjQ) zZ5_#u_}=yNJ3NbI?YM_y>UtX2K(jpFwKDF+1G10TkB`jC6|vGyAp*~02zbbxq4~wpE<5^Jz_s_ML8s)Qhx552)Dx-Rw?zbI^K^Mab%;b{;-xo>fHeO!u+B z;pok~fzC(CW@PrfPRM$V3=D?{piBLv4t?qJ4>v$dA)N*8;$No;@Q)M^dTnzSw5RFH z+ja>vgY4+ujBUezJW#*EG%)ySUwYpjgjlF*@{s}Y33p5AhyN~^WKR zZ@c{EN)N2QmF$|IaCyt6n#t;6rJ|;``qm#K{&w}uDgmd|L-$!_5)qXYzaJfMGV19>%7Mct6yNwe?$#%M!6&CG1 z$xuk^7qfk3J_#G{;8<;fLt7_ZzXo_=G869N{15jruSy_=+deVnFOrw<`mz2XSn#5g zqcE_A=lQ%kvkr!Vu^)cD2ByQjsjr79<)$SyzrXlZd8~QeFMm##BZK9>pj6Ftk#P?r zHDD_5p9hbA+MbC?oB#b)rLtAa+8g-42f5h8k?VoOp5UFH_Lfg&jUO?yz0OXZ zCeC;a)NNvt0SD~HBdYmAk~^slIxDRFo0Cd5)1wIovwp#{BQ{~R$Hd5HFEdfaKOOj% zbacdT-3R=$`Bb6Q&19Q<`-42{sryGhds0L?eE-2Na3h5GR!JUg3{Gb5Xmv%I8DdET zwD<^2Xrivi+rc)jYyaIi-w1=M{B~$2R$cC5O_za<=OxC=FclQG8wGsyU?r5g3h5ex zw7s?l*nV|22sb^_<|vv#uZ95J_omLm zKN}{CexLXj(OdCm|BDK4qjAa-$$&m{`jAZsb0qB$1RMd_d=CC=ETb+3%n#mMy28ap zF#o{v9&bA|m`)eExmk2z$l_U92diU zQAN;VfV}fp?&7MH@dZCQ&uYDk>2O7d!}H@hgc)w^aTTw>32G=XD0NO>{@-TRljCI% zH_rk0@UZSq!y`&Hs}?{<&KMgzeU1P)SXWix3O5q#^^4XI6{J1LJP)$uVF~yyBI&Tt z_*@@=;PV$ZYfB5#p53^)O^w6;pFYpNAI0Rx(Zvw3Tt>|`JpGs7F?YgmkAS)d3vLEp zxBLom*$J-PClkCMJoJF3R&`u$rsLiVgc=JE^zy=Hj{4ghnQ$VMqjg zg34RyZ}QjgxDgZNhp0~E`|E&z=@IGaeC{B6Zl^k{cZpi@MY039K!-I;Z0{#kJP0v9 z=@RxjHK3n%^@|GuAa5~P__^eP zd;h*2uDsG}WY4EFbAVr4Hx@XV?BU#5#p&LhWrfaI}BfRk5*{-7Bfq{eL zh_Q(qBwxgNNaRpNN9%*fST1S&BiSX2Y6mi?jrKr5neJl>Wwz^#4;e!4fIG8=* zA?I#{xFEqN7f5P(?M4Uu@)~$qX|;_B5a;mA4M1Al?W?rzp?8T3>ug8SMGCEJ$xokF zv1SeXM32+J@{@gdPz9t;FT$Yb%Y%iWMq2RXDklkaAaJHP={UQNsM~@iq${WBHB?vf zezJkz^!A%&3;*u&Qd1gMUvl&2T9lVE<4@U zrg+QCe)H*w<^>Qg#90rx$mpp=}9AQ)yi8iZz>%K0nPCN_|0 z-PY&G@}KB@Vy0(Rst}wq@G!&{GG**Pi>}S^qglm({`;2~%S=w+ym@DdDkI7~h0?|< zLHqB1rw-F`zxrn>WEe?Z&%*LeNuYMccZf%wZ`3W36uk%B&qxPQ_|lh4@}8cnvSD+c zm1i)md1fs$-#(|Qi}oq5?8>@2adLjykwyISo#K^yTT(%_SygB>d%)K2oXs;`*=Jw` z7YeP3=TEhcPaEtJhOhaJc;ewMcV5n4fr3qcM0R`Ty>C)2pNKT2L#;xktUjE{XHhE2 zc;C@TMDZcZvLNT*bDP!~%UHcWi?IpfY7}dU==X>`+?<=^9|&{JjFFP4e3^xtKm~>G zP;GM;mZUq1(Ni09-}ixoyylqP&z)GA^XZ1UMZb4l65hJ_34K5xIe+Hk-(8^3s$LlS zitP5t{meg-qR|oiTJ;B+m!H3f`Obqu=9C|@H+g%k6|>>xbu#4B_SXU{pSpZI`rt8k zd(SOot!YkLt%y*@!R@+jh@@G#A$+$=I(?-2U?5$LJd22Biy|-ekN)~_{)M9gY zj|&7WebrFeFrD)D)lZpRLf?*66bv=mZq_R=SgKbm6-FB-p_IJ+=5v+Z!b6A0z&J%7 z4;{tax0^oBm54k!acoUXhoXqyqY|`IhZI9YP}ib)n=%yHuQ>2{>{;LjcskGkvZZoQ z&qtbMh{@^QI#grgRy^6hSqUY?nr~B&Y)I5Inm)1?pP(e$jcDRL+MddWc%nX+Rgedm zO7kg)OvMaoftxyAEu)r62|B}-^2!XHF6NXK=RH;)WJ=j3v^`gvOYbD1u#DT}D~C-@ zMW;8VDsWOQ-qC8TR8Vu>IxmU9%gyU1}Fx zn-&9^Ci(eR%@x_QWczx#9-SI7Lw0f{O3hjz`JO3ZgdWkxje9`{^`IWRNo1&VJGPCa zPp=mPqV+h_J&tGGYZAI?*_AzgM8D29t=LXiht$xtF!rboMraR(){nk4s>7;q_;2P5 z@ryKld@cOa{W94v0{Kb(`0tYn18FVI@UV3H*a5$=%-WN`%3tU!`e_ILZb_&5{RgKv z5rpFGyl(QT?8s!SK0&Rq5i1vEY7V}@N)#dsOAwKg=Ao!a_CHa9*7{l}!sI@kdKU6j zfV$pi?~hPA#FTmuyzex%=gHv*t-3z`6f#hq17-Rcp~cL16!*K3_wb$$#b76(j6E5w zKZ2j$N9{Ri{Rv#BUIq`LePvKHaI617HGEg%0e7Rwu;Qgllf~CLIqBtUi1u6- zXVO@-7?S6`0YW-r3(qPpY+BCA0~3QNKSf4~YVP(~8O3PKWi-cPj|uJ)!@;-)HiJ~` zGHe8kCVjfS+@_E3HLM$Mn-(LM81ntqqA3{=E!SL*N5L8-Kf82 z9KvQCv6^96G+k2o#*g<0jVv*M`Q2n6_!2%go^p1c)178_^fj>R|9Bi!B#X`A z^7sOw2pj?u3K|9$4jus!2^j?q0}C4m7Z0C6IUx}-3D>?|atcZnDygVxXjRdvre|Pe zVP#|I;N;@w;Z@7WFCZu+EFvlB}U8T zMzB?gr+a~R;~(48<%7kiMqgf>1?x%Y;Y$Yd5XK)8mpUz%x?)bF$$R&@`ES|j$<79b Wg04?dcHtp;N9jIFDoLeVYTd2ArB>hF(|5OeuI}k$?!$BY92?(bj12}8 zybuUCS-|QU50}}EAz?`zuCN5MSpp>3gb&MqlefYEcKSdD5LAbta{rp*8`$5zo zh@rD^-Mw|{;PC^=f4dW&zW|+R4z8U!1@~Ekm^cQd;^48{w;oAwa;X29AhM-Hn`;~E zp~{~TL|y^+3WwkZQ=>MZ`T|@B4jn&x@sGZ!O~CVhf_VKYx7f z;whxneHg9-aLu1sJHC0Kc<+yZ9-v9~xj*`x zps=Zwy#Dh9P~Xw~1^FHFGen6PASMabCxN1ivT(vAE+x5r5&4 z%nVI47Hc7&6GMWZDdM(FNWc$5BF&lMnkv9kcu2z~`iI`+JkK%KP>)#ak&jQED)!du zj+IfdFJ+!H4&NOLunBL7EIoOThl(6gKJ{R=zHel5qc<9}xxDn5-bduYzHXsQ)?Msf z9GENgb&nj$g$HBCobp}wmUhJgtUN|hX(nW!f8wq0=~^E>jovDDbvO$F(Om`w5`*YD z;vtZmnxL=B3DlMuumS`#%SMvZdt?su+~;gso!+N&d&(B;MnAB0@Ub^+e8uAQUq9Zr=bkwL93mE*Rb(c= zM{qm+nDQ2bStn!ig<=5!ASTJh|148G!j;&R!*5cVa^x4B;`OE6?8*6EDcWY9+WM;h z(E}ZQqqsL0dV%;C@;Sl{z3C-RghG*KM9_^`v{-XumSze?E7lIE!t$=L0wuj%s6$LT zLmow#k%c_=c)aLyIKw1*A>9`U2qwSF<_cK*d_uQ}_j2Aa>-Kp2V60^G6XX}jF-dA_ zIY+Y`CpJ3@JU}K@%up-lYHTo z6Abz0ABS;^$>vXp|4Li{>!YvIB(wm#!e-^46icF5vf(cg+KJ76^i}d}1ijM^S&=BB zB6?AN{Z5`jZ%~teuKvxv3LSNkB*4NV&7Yw^MgIgmbJ%7za%^G90>}mTmyzLPBC+h=K2cEq&zxy4w;1}*^I;jn7fegrEVGYm(=8;w;vcDVJjWGRzkr;a!&3km;8m8H^a^jXNJDcERL_< z8*vJU#s)(Hn^#B>h~*_$SDnT{jZSk+uvt2r_r~m4=(K9O;X8Aevfkaq!oSa`qnR}-h}x| zHAm2=(Tju!OHR@d;2{C1`WE?F&`t<=5IhbRqly8SNi#IFGnC*@lGw|_ z$Ot6ba-Zl+O2+M-o7_t>_0`J!n^!WEF>bJO{(|ZHUl{MWxLgh<$*Y}m4H{W`7LBY| zmmW=yFCe3I9{Q7hJB6^X%{=m<)+vt>hQH7&KxcN);W%Bb7-$O(iqC`RzAR0rIFk$yD(VCQj z`?+Bzy`&T?iWqcKAiz=K+sW)?@uFTIHFS?1u!(QlnA~y{(!sMU#Cn$nGE)3eB9*T%Ctv&_j(sM63JFrdwmq->I6)F1AP;sp#XCA zxeO|hYY^g9sO6_6iWtBoHZg1qVw+xckY4Ut+?@@bA96l=X5-pJqurievx(GDckh;L zgg!mJCmSl#s`OVrbY{af+Wi(!$KpdOZhxWgD2$qE{+xI}`Xa=26O3xmFt^5aQi_q- zFf#3+?r)bCDX63Sr2>1KbhAQSMSli8xu7Sml_3~!yl=YUH8CczaOrfrD@LEv`ju*( z(U$T%(Ct!>ul%F7FT+~0I*miEUiP_aemq8jc!2ymx=qSd6xV1ODcKMBQwICgFTHYv zA>T$z-)J=aPhof?(fkG4BCi2eNi0?MtN4RR4?(bP<=71Ib&EbmN5SU9~%-Q<6%Bv58LDAso~C0*3liyalC|F zOY>!jL7yge0dgHGj9eyT1;aPwL>%R44#op5<6H&e9T*fiyJ9chc6>mchXk=<7l8vU z&U)1Ijpk9!v$m@CXe__CXJ*5ytlQaBxdTrh3ac07yxwK9Th*n* zV@C@Sy~rm_;UTL!5ZCCn*{IVLvKsB32S(PVEbL_}MP4O(fX}^PU-h}sULUqExxd8` zP8FnV3akxGN|bC$!Z_dp`wy#!%tBtGqZp>`>8V~h|@<(ZNjR~4Z2g=#cKQrr=F`&3JaxE z=oNj-!->*TAG%#;WlTDoPCJr`pN!6O|8Zq{AwRN@t>9SJ{2{qXew^qAo#!a5b5J;D zFawDfXjum;m0XRK_h7*Q9$Pn|32sBT64qh?srlMvmrSNnTAibDXWnd+Yt4nxlqTY1 zJygelZF=#sq+>C?8c4o%Wmjy8tg{`t870Fgtpd$1&^)K~2K(KaVV+@CJ~nT<=+f)a z;6nOs(@WZvIozwLPc`;0R)K0KAoWL(?PIDVyhOF+Y(Vw^&`d8?EU*yaLHdjcIV9E@ zPAgipV%Qdntsn~Api``~yz7h{-eOf*OrygA40(A$FF%~HNu$VIFk3&2ZK4|?A0R$8}w z@oJZXF&i!KVEsu0FYBn-rk5V;Su3o>#JA1QM|Y3$Lzi8&T5q$B#~tJuCS zw=xu!>o=?{?KKtndpw36d3T%RWySnlW8YGZ$6C^=6c&NjNIY z`I0mEZAb!~BuPOMbjz1wHd`hU5|a!LyjVM6TJRV%gWU_@2+ISVx+9{E*}{iP-H(N2>gq!P?^%_VrmuLs6Ma?4}0|1&`HoeHSa{Jyd$Y zK388`EYyzm+Z@3Jx$hY&n5>=MeaMg$=bv5K+ZSNR)ro}Xs52VZX5IZl#&Ug?RaWA{ z9WFgf_0Of=IaiN&p6OknmxFQ8V)I{{cajg1|ADB276(G0MR^ejhCq|gfnp?E0rTI{ z5r9rIeB49^Y+_Xbt6)Wv6yO@2N*lvgzd=b}9-DEg>`U5`&mGj*D(-lKqc*?LJxHq* zdbLBPJ?YJCb>v2mofvk;E`?%8`-4JiGB29{a;=sRY5j-Qxv(zQS8&84U&$Z1+)Ytx zrCFgrmh0#ZAD`&WuTH;v^&F11F7N>y;Lr?FS8**H)k&HGASGot$Od|m2>Fo|wR#~W zwKWCA@3;d}r5>AM%bu`DvoCLmO%23P_)XF4d*r%el=AA_VQqYCMpbq0K)KhKev3Bf^7bC^Bk!H zN{uk{S6oX5sn$xu4e(<}3!(Pg{8`ZRIiX9Ax6Ny71w4)lUfPy90WZ|vQr>L5-?M8?s@A$CWpf+iJ_9#y+b@b>cg^u%CVk!CbY9ZLE za)&K0t*na{-@oAYp7Bf|&G_sm-SI*lo)R$c#CCEppd7+^{}JfKEF0SRl`_ zhK^Fl+NT39p+kc-a;-wAH5gT1Z+fpO`o#QQvg$>Ri|I}lXH>G`b;Eo1PY2y!Q1992 zoMz|slt=B-S~WU`RHYrB_otkJv6(ZvD&sYJ+y+^{Et{>B>>l0I0n4UlFz5#AAs))? z;HB;Z>fH?X$(T$l{@MxU*j`(4gAs8|#7+vMu9dK0_<=iycR-o>TuxH4q)OaGdVm#( z*HCcN-==!t&cq~4LW{kSGC+2OKHyzW4tYXHI@~_B%VxIsr+5|ZH5kKBb|RKfYYkc* zXB*4v`tM9y%~n=B>a}#*95NY309OjCM*cAC5Ay21g0J81v>OfeS}NxfT-B1^5z@kv zh(2qG&xz?djv_n5*}23}Bok5UeW|{Oj`HRZXF7h*NAu$yQRE4Q-LoU1cfI}T7;DlU z3fZ<61}$!Hr!QtRjD(|KzWBC$ls!^5JM6o5twfd{4m+G#UyO_OxzxIZMP*P$Z6Q-C zYw!!Zvani#2zT@QR4*W8Kgif2&FerOAThwV1$2&sG!_fgAS(uW$N=uxU|Y_#6)3=5 za9bP$B;iYL2n+s(7;%T_gI>j--NeojV$RvLDfu%B*oxMxEU3cg_y$ zV>)au4!`)qrSuBSi{Lm_= zG+VVUN@ijz=}Rl!Z=Sc2=l!+;Ye8PSEG|n~0M5Yv8!->kuq!a) zTGmh~W--zLbsm_WV6Fik5`;ilkQLApTJWk_i+38P7}&F5ACe?dW6_TH64m*3SD zv?~}7tIsU0mvPhI)4fl@Mh2)-7IZSB0S_w!*nj?es>g~4pMjkUP8KEj6eaY4MFA!-dYG2?VnQSu$<0pvZ(*>d zx0}vRM@uVK4`3h*KvI`k)xeNRCBevVG}~iFfB4*%D)@f@gyBgg9W|A+mGc+{fG18} zhUlZC+i?2wtVd_DJDtuxFCYZ`FI5KLz!HZ5Au*Fun)erq*aZOkAu4cYFmlj3%%LS0 z0C<4h$trmcn4@6(2XFw#03lpyVMOu^Qf}}%KxuRr@3ZO{1?{p&yM1y)_CRk+{F+^;?jVSwMTd%5hT1 zWHXWOl08uSVE@>Dm7X;jW!l7W@ME?Gj@>*b8#HXV1=FP|`=%LOsl^sHmoraaxVy_6 ziN#F^J--8!dF(|?5NCf*ZcB3@2aElN| zXi`9P+O*(yJr^ubS5Mwwdw4usI=1{Vb()KCyv3#}+f25*1J9@DZyS4R|6SQsrPKdT zFV1!zNRw!ES|(U+Ojz{+r1KW^=H%m+Of>%;$5klBQ{iaC4;eGEbLngmmg%02IWIt zY^j83L(buTgx`0-ndx*T)&1eJxab`S7Az~Q&N3J<6_dRVdtcBA+jFS-1K{8pSl=mu zjhdx(YfKc73js?qLoC!C&)i9uICF>{Kl* z=r@HYY=ISxTy=?cI%RT=&+7I*dGQ{uKW11Vlc7HUbJ6g5AKN<+XmrHAr^>SeTYK@z z6_s@MvhLWHjch+A>nslosUqLx=cre zu5Ot-@9_Kq-(fduUioEaaA|a5sGKi%a*R@NX>yBwaUn74@*i^>O>{?6uhhSz9Ql25 zEKaJa{=P1!*sm*9sr*F5h~<||-r{pQ7SPLmwWUh%z5^r9TGTx!JmRlj|3xG`IMn&M zsW;lQZWN_mbN8bjZRbE>cQBr;D7e6QZ}6#L+><)j>-Qir*u@Uy((`+Z%MaE(T}8+5 zIG|auV!U$n1@J#O&lm9;rwOEFv4YGBMQMh^fxi(!T3MLg>>wV?OvJt!WLCsbE97A# z7WP1}(3q*WPQ*P{)Oo**)7tfFe#_adDC8T#@?R;cAu zBOg>mhXe5m%!#8JBwudlqoN&qQtTRE8|PMx1yF5E{dm>}T!6`AU24FEn^nuD!Usd^8%)Oh5a>yJv3~gyB%p#SeV* zEf36;S;`ose2_ou?JG8msWSY^o_^w&$aA-g-L8 zPM>%<7uVVhf@Z4QYjFEI#>1xNVVHL0`(%fEonBRR6%tIAl!wFT4wH1PP`>BFZgnW) zbLjis*`PZ+x15}x;BZ{I*t{QE$(LaVfWFG$y*|Vktel@QShC1^;lk0Jc#-^5?Qebx zSs!%(j%A=`vw1)9`|UU6cqU>JVbjGB67t3K7cPpqqZi2Mq4jTmUvAUl5eW1r=wHb1 z5^@+phIideRz_sRfBU)kwZFBJ-~F}on}4Iho_C=6ZS)iLt(_enhXP5SHzciZ0f3~? zUv_@NUK@rbmeFUU3DW$LSf;AbqkzrA+?hc6y2(UQ1+97ar9{cobAI;`x7tr{ zZtYGcU@m-Obo7@_(?l*VMk+A!V)Jj&X93G@@OX-AQJ%vin~GLQh$O%DTl|7mwjz>= zYpV(XOh0_lfZSmRV(Qs}9A&X%L0mDP&|_5#1Ao(WzCC^$^JV82YcE zWe>>OWi_;9Z2lz9O^uGbV=t)%By!%>^-~;*(h}BbS}lp#5Jta$ol{v(ovErzQl& z8PoJ|cn_+jOyT_sV-TVz+f1P^!ak*o2uk~>u@LXJ;ZruiOnara4P}t46^kAG9TSv7 zs06JX@GPl<&CZR;^ws^b;St)3I?%fCi^FQxxn9oz*BX#lZq4S{s0{Xk0JsF6xR}A6Xp?T?7&tYqfRVBB96_D#uCPhmRUyNaK3*v zXrI>q&{29w*~=JYO8H8dEe7QBJG!ll`*rX3btvMV_s2$3G5ZO@+f35jrgjcRjpnpyKoXUA?#CdMgyFI zL36+l_SP+*nWQ1_!|H8cLrNoQyRB&~eD1@S`Z{OQi-ODo`>C3H6j?Qe6s*>!cA%ik z$S-OmI=N$4k0vJEWcq8J zFEZ*(^gLdUSh?sIluj-+G+pXDH1Du!_GYBDHDmK1NG0$P10Fm(JkXpKudskOYEcOE zf`{6n9s*b)Yq2(-%=9T_NJ%S|a#G>dTq-K$(XIg*6JD}7)iRr)-6HiOI(f`*Tb#Ow zWbvMng*`Q&nwwa%$m3r%DGTGGr*Ertz-rd4ux=a&E6tbCyU^dl2@WS<$D*V0Y~Biv zuz153Mexx8q_(5@z@XPSbzpK>Zn*=|tcxw}4bf#+IrN@K5+gZXU*^pIDUZp&zGqMt z8Mr$a7=|%4%_u|y2jDXUV|2vK*b7UH!fdQi%qMB^iqd`(9O?jFN(hCF)C4Q>7@jcl zN2b-vkVD<8qjd@;937g|8IxpocVbj-eW){wQYRcV-|zavIP-kfs_Rt!N?}%M7)C}0 zrj-`6kW|_HBLUZF*BkndCY5KtmJOM+|Dil(!&adOuk;w4dGY}Uyrve8LHms4pD}P@z!q`^C?r?$iQ}SE z?L=K_3!il>M(gBTBE7T%Da|3xChtf0EDh_mMO6o<{V$c!qQs`LKUfus*VW;S%soU3s<>3H%>?QA$auBwiwc#8A+*F$gpa(oz{w1B0AvMPgE2!6K zO;L}op%r$Nyiey~G(-0YFBN&q`rHd^!bhP`1^5aQWSjtwc_VO)S6`&_ao95gQ#8XQ zVH*k(;I@dReKOe71jwNeFxs#-Ob_K0A+2Z9YNcXMQ5z)>&F^bID{R-3E(n^a*but23*XLwa>g{qDW#uIlU*jzw9pwNJv?UON#1q=miG z+G;T;N?Cz~f3BqzpbRgrFf^QmgFL=%1FN#gw2nv z1&w!j+R=dl?P4ea8x}apBH0zjGn_&IZXnuAXJs+7aBK~jdf~XaqiTpCA1jv^IWyTu zy^YWHjCS&lSDu0U`Gjc61AlG zrm=|H11VXkm-qSQ>ZIRNB~b#ztZt4m+NjCjf&qUduHU!kErGg%m( zuqNYwv~WP7o`^2=CrAAmt7$+zI=ZEw84Ky^e7N8o4Y}OwXYs&OuCDSnS0b+& z&E`5d{gT64+%GD&lpQEx!>?b3KU_pbyW6b+2YQPC^t4EkhnY-%;pp3T&(I&;`L zJEjt1fi8g?OJ~a^Vcu#?s;2JG0!IS)@NM!C0lzIUwe8N@@(nH3v?3=s^fqNb>M|+F z;aHVA@qo*#C=T|&Ge?QFi=zcn6PrhWTukgP^|K}W#p3ThR+=bw zx;s}_BVAaIp6g9C2fO4vT!77hp@1oYV}|`D@Dm2`$}M@qS)?MG8+QAgf&O#agT{4Z z#~%GI#dyLk$`lm&4t7rPI`W5w>v#K~XP&-{I{hoj!V$L&+l8m8gL%_OU=~A|D4Kyq z8aT;-4^|eW{56yZ;6b9!_(d?>Eb}!vso`Q)(n6awG`W|ZbPB!6G{;oMu7d0=Oq;I1 zI1-A?C1j*|vW!aJ@(;^?!y8+=t!k1%_UuH>=hcVh1Ah~G$YhwC*tl2e&g}2$Er0~RyDCX7Z!`17X=v04bgTFS%GLvz+7LrF^Uv#v6}=%?s;?{fv+xhs*gf^jZP|T4$qX` zW}dd+6kXR>V6EpH^!W=oy81_{azK|enb?ft)v>iB*}IuJ0dx?=D)9!G5#v8dvtjP_ zIDETwu-GI08R0|<{?|op5Z@wxf;iL-vEm8zEP4S>`u>9f%;?W zx=fHQ$WF+flZ*0?(@J`S{vy-M{GmdvSXF#NnNhx3RaL#H?pJ?ZGo$%|wyJ%<_E)-# z`jGxH*2tb@A7S6aKF9vV&}rB-e8})!qt$rG_+jJUnH;7=rYB54F_+9o%%3*@jEi%3 zav$LS*^;sRzU5!6W$XR$?*rC9x9M!7wmWUtY`?K*?8|oeg^cmIOW zQ}8>YTmPCbU2no_`pa-vAxQy0{-4rsiU>F_j_U*p!(PL;2qpXirGxke{DS2{;x_m! zA`9Une@-N!thUQZ^h-j7PXs5WLJmIH8@J>Vh_K z*0EhWsUD(4zKgJt4>f;4^$~8Fh2Y4qLfZktL9P&Lp!XuOz^@^G4!r%G7$D*7A@DPT zenx1~n~5PbM0n7@!Wc?o0$B+ivNwMP&uz#?tdUKEA@zh2{R2^fcQsIU!81L29x}B_ z=wD7K08CkmhG_C2@clF3`QhfTu^d5$3HZd(Pl!?UQ$m3D9yAJ{UlCcT+tC!^M!x_( zfX>L5uQ!PmnFF%$AIZFuCb4FA{#FSRJ%gTvHA{lL45#@C;*G5mW+fd6qxr_)y#(5I?;x+#oM4WFB3(K`S&yRnK(9MiD=(&~UM$Xv?*H^dr%L~g5 zGPw3>1&C^WT{z(M`5HvMK~#moE6`_kwUTI{c!OWvN;Js0;1hg_1{LQwu2N=>s8k!K zD!;l~*(S}^%65>dHpuGyMZTdCpi*7iXvn57ULi>mx@q_}T|RvGijG4S7Y|jTas__D z2G4{BF}=K5zXF+$G@vZrpkfWKx{SwbSgO@_11G=1H(r=-$U-Yu!bn@Kt=AfKZQ0kL zg7w+m%h1?)d6{oaPs6SLx|45|aII9Y^V_Y~Kv5WOwXgU_8b43tmM=^%^B|4OYkWgB zy}Sx{c>GL-YXw{@tU6cg^|}+J)zDPe8^r8#gBZt+eQ@m@Z+LLcGrsmImRQFvJ|!m( z)ax5-^#+R7>unC|{08tNRO*R_JkHnnhAg-SJTcYjEBv>uiyazoA`iy&;eK;9-@&%wLAFw$t(;NN8qxb=tW$TVEFHzB=FNpIe4! zPAr!;DTxLXZz!v=E8wamsVm@8s0aWTp|aK>4{SBiItWFHs67}5xjyirTkTk7cPz*?@0_&@Aid$I2N|l67II%(+yc3Ar zp%PRptPQq?(7w*=jR3p_FW+G8=9hFB|3c-eRzpxVP?1yc)uRAneSDiFYmJSy!9;_N z0}DLg&{xMWXHWqRHCTK#3s0#)`!_%#Ye4J?LW3S66 zFm z^5tP+7+laY1U~S(5RpmDdNxDJIFDLnK2%Zabj2&cH#kW-uYcTpHf_Wy!nEN|?`x`mR{cN1QG^){Wu;DF1q9W{)= zRaeZ1b%y2A=H`Y7MnMEz%j_XL0Sh-J8wIfPvDdjj4&5QMsZoSB6Y)kT6q8trH4r!a zzzJ~MreZ3N0o|AcG4G0Bf&bG4RHmVVaAhWb1xa^ip(5Rx!)=D)(L8R0D+{;{t}Nm< zxUv+#3f`~^wPmP5Y=>GseiagYTw8%!>)vkM4&i%ya675C7q^pY`*1s{wjYmKgJ!FE zOk7#RW8%sIJSMKJ<2EBu*}!dZWfQl-l`Y%`R}M;a4MOdZL>I0dmgvH@BNAP>c2uGZ z*N#ba;o5PDE?hey(S>U#LB`!T6nILyYV^Z{+gjBDsGi0`$ITiQxH7ttxJQ2lUg^>hjK36*su6RmBbNhPJ&o`nyNE zlKQ*Us^aGNwyL=Keeh;)tG_q2s<^@ZttxKt0JQD9(cgp8mDJxuttxK*aI1=&KLT&| zwfcLsRmBZ1x2m|oWAQ6$DYI?R&MPvKs==fQVp+WsYbZ7wRABnzPC!o(FaiA2Sx6_* zn;_P;rhKQi38r$zj)*9(T-7L$s#UYlQcY3$4Al=HRKs0m~1sUFwEH6Luq9*4+0 zcvZeZ6N7_ND)2jB)5J8sNB&XsW90kLH=BuO0`^c^*V}L%XvC9==xx{Oo9=7LBk11teI1dbegwa3J4u`( zZii7169-{de->u#VPYM2nRr-}NyEQRSgXLb4*2kJ9&nR5BegvNS98$vFx)u-pDwn-cZ%EqBS5A|jEMadA*xkelX zD$hY}7VaK|+A+9y8lIhmx6exDX}G@$J!N2h7E@i8`hUHC60hp%^+$Yl%S9OFv?LEa zHV-mN!lw&rXW`!#&~*;Vlfc-Zyq@gV_yKtV7hoo2WKRCo`>%Z zxU-{Co|povk4qYTecfQpsQ@Wh)@N>cdk(nWf>AC&FQ=tmS}l%2ON`qS(7rX|IjCdY zord=@RTx8afawV+cY&SYwl~u?aZ3+aJFkrhOxtfMyLDV1s5%dy!xD}Uz&9TCw{lsN zMjRk!pu{>XLtofV&jLMV*bPhp_3J?KVYogE^(1_7Uptac0p&x$!T-xUBzPeBgL9Ob zR_#^at8k5A35J3dK{@y?75qPHG;kh7N9bW~&;V=ZCRi=xV5QIstLk>}Voo@3=7zIP zJggc9V9zE5Cp*G`!YJ&H#lasWfgkK^GGHA!*kvvdML37w37mETntK4T{oo%4i5l=U z413U{-~q>hyGg*vF7UE5fTKB(^#W*O34BH!R;+gudx*WT7WxU|lZb*7#BxL<2Eq9U rq+-sUIGj!oq;XlxrgzGY_I0LRX4_@1UFO?mpjZJpY-ZTHl+ZMUcHsd;MKwr$(CjobIT-yioTYtQ7_*-x^PS!*V< z^2AMEObh@7_({yE0QmpzGS2_k{;&N1CwXOhCIEmE_J>vefxhULOq!96f&CAs|6}X@ zz`LYFuf@pKnGgVA{7*;v10J{{pc+$qGn*e>4*&q(4gkQz8q&RcnHf0!_%g@-XdwR= zh-TIvrT_qt$d9YZPaQ`XEgG1)iGeWyK>nYO?LQci35}ZnkN^P1#g9$!gI^G$Ajal4 z&h9_Dksp7OANY3+%5z7X>#C>I)41f?D?GPn4YzH)Pwl16$M20zo#Gcg zVAXl%`&9`nqU$ZEY2M>53`A5)LdZMTL~({-k=VRW^WPD!tv3_1LO_Rl-;u!XP`dTA zujB_>C*xsINQnDZQE4KxLUl@Is4&3dBk>WU<0hBvStPY^qm&^+dGjZ|+EtMF=*;nn zab1vA2MkPmlN7C&p}TmpJE8~DC)32HpMTlL{Cl|Tq#CpXpAS6hTJA~2z9(X;re zb|TWiXxwjG)hR65QhXop>t-$3z-;sc^dDZQ_;b6XzkroQLt?Q8KI-=?O|#d7(c+PE z)fGgs6G%k^dM(+jO4d@YE};TZ2c%jHL`=d}8m&f4DmoEWA+v(IjnH1GyyN`41Np6t zlLL7u#UK)AfxIoBGS)D4-0T{XOp~>oqqfoEm`?>zEBRbkV+Q5ZvO2uneZB`KX2pn4 zAHc(Ku%CD1OuIMCPJZK13r8lIeh-u?S^qkvNZb1SdzNLK+M9rxOp;$!D4y-9w;lKN zxIch` zLoJxy7RSBeH3e)3-OrXhu{Gx11!vwH5%PA8aJ0N6y)z6cf8`{!SUtW3x#52P-HB_e zwz%r-Sed)3pTh#jeQSs8b|Pq^S>aq0NT#+dghiUjq3$-!*{D@>T%xTtZ3^~X&9|;j zMz7LYOCZhIxTw9BdM21+Utino*l`-!&Z#Emb7%jT6|Suar4-Pps3J&1DH>Q&lBb5J z4!yg{NHPNYVy-*tp66>6#Uk=qr6L8_%FBrAO}7jiYNB?>)oDO9J={PzSH8b zDXn*{wB3k}|8$n0fsgNfotvlcK^w|W^+3BRg5T5F+|m8i1ns5PR{Jp-UO)T``U@lS z48sBw&>Gy1-{#-Ak-8;rY!2*J<3d2ZDa_6=d5K45{KYkDQI|r)6VcvCjwSv zlaqS#uX%q4@8{H*=G~tB-PusUjrh(o61{e)80&xtQ$fil{;wqVHZ`p_VBh|WwJvzx zHyPbK`qUVCQgB}^c0=%^N48nRCw?A+v18nGklVv)q=H^Rl$gyQb2DUb@G8V0>JdM(&%3aHdnlupFjCAd@| z73xa*+Rc05)(T8jdG+Xy@81D4c3(git@s~gPjQEnvZ&+QaUVsuR-!kjmqy<_?_tTm zo0x%o@x4KAtwv7Kh=q}-BYE?5ld`iC@w``BKif7JtS7V7+Z%N%w4_c~D|f{zcL3X| z^&MgF2oqBoQf=BBOU_1;g*~tnL~t69$`2{}E_nZUqHzWhlP7Rn1xRE?UV^V*T5@V_SUzVG{Z@qEa z?}`E2zN{_4UA@-Zj|fXCJ)GWy6|Eu__tQJ;Cm4v>L)k%eacai+;tVBx19IHPunNAe z>jeR4y1AAG^HBnBf3_!3%@(BDwEDLAJyuG29G#C++v6iQS{NVKoPa!7Sb>%@{uRFM zlE0=(H;GXjRT*!;{fSPK$Vc2WdulxTSX%%4aEo$l80k>iOjLzGGD;ATEx?{gR7F(1 z86|Wi+#TWSq8SqwoUx!OgOHCw&mmU3uXxIJ?<>z~d&+L~o$5ZLycT5n65Kt|oXSQ4BI8X3@hiYn$};_}a#=p^WIp%{t-;6- zZGQDleh2dnJBlhlSE|#+mZ;I+Q>Utt=ygb4!06^#xihgoEqI+VBN2i)K*)Z@%b|pA zw;3+cDC^4peqGQ_6P61i!AQ!R3LUoHuu8?pwF8~D?LC2%uY~#c$p_LyPPX`yz){Hm1 zZ)y~0cgygyIP&BT{DMtpf5!r)9`mi}okw1ZNu1MbpP8z7kPyL{ie8uE>6*V0z0DG5 zNSjCf@{)>SwMWy8c=GkZr|BRv1U;+rA>v`NYJC(WX;qa@S+c9;GzvF%I8^Y~<#1&g zRc;s`j~s$LFI+lCfE-5HFtn)CaEp3QAC<6IWfPxT?xsz7t4@;$ftptNYd1YDBb(XD znADKzB>SYi)F6>0=DoT%W`Bk%Pus+h?>{T{ueOyftE!5vR~9_Z*n-?9lcJzXmgXjV zBUOt|{=!T%J;mhPnyEeqkuD66 zo+X^Amj*>}3pEV(4SHWNo-s6)$!pZAJ|OOJW8SHJi3Y<8bJbAJ7sM@_Z&^*y!=NaL22MgrN2dyouiE_1>TbNj1rs>Kum3n zn;f#6t%C^d{0=dT*ESpFliFOSH)}%r>KTL+ykDFVwGf#B~U`*7?$MnR|D^^ ziPhj5i(@1YU)W&XBd;=hwF;Ik(-MyGyB=a=D?uUNJ|Sh!w2 z(h6+FPE?0tc7*wXBQG+uptjspOd|f3p!DyT-0sg#rELxtw}YSM`GS>FYW0e- zQ2&aMRm@;I!A)yn>oJ=wHF|Db7~T8h^}(@Je2wUc+R{#<3ydXvyz;xtIxAqL*hPIn zoUV>qSWoYuUsb>I#osJ{88F6|a0gGL>DaDeK*P$6*b)q3U6R2BR6lR?G$0wvh%Xxs zBY75P z<2IYPf|2hMu-VY2V?T8v-_Ns>LOydUzb8NWy^Bv65+&$Ug=Q?3P3A0Sky&-vu8gHh zkhmkyAgL-3Ly^>sUQZ4a8+r1s>wK4gde(*EcsGM)LfOcL#$!g;9yzH}kd0aU`y;QW zGgNWRmxld7Q=7j*35%Ec#94gqCl>@J8dv2{vg{V?ZM5f>6M&MR-7YbI0DsF@&H=WH*pqMgU z?}_LAxotGz=>tuJG;CQ(ic~gKJ4MfSZ)*k#nUpKaThBqq@`Yxjns8Ux;ObrB98c5Z z;TKY$b%Ua9{o|Uzu6ox3pOfoGLI<*J7Jk&oYFb_2=gW*ar)83yQXyuhwc5t$i`!Tz z!O1Yg*Z`J|nbfP;Mf$1O>&}K3Le_G}5)7+j8jOIpJPrli*(KDdlo>HFrTHT-N$}(1JAp%v_Hq)Hf#_N=Nrqo?hGgT?c+##$xA`Qx4#k39rSltYMR~4dvR(HnCfbuE2xGrX*|EbD zT#u4sDu`57v>YaihV)7c6Q%_!NKwCk$8K_eIdNRD%YgLgY+d)yv{ifTmylcpa;J$_+mqUya6Dx*B96E}gezusmQ9 zWv1m2wH&ku-3{(${||iiH3uJpHzwY-7s+3@`NN2 z0S^vV^ciUs(c z$av=2nWb$X9WGz9LS;*$uD$eNG;858ev!SZU~B)xV<@Zo2;tLvh5DGbCr~T8VeyIq z0=U)3dT+K+3$8zfMz@YXf9fCHzWBv8Hv`74Pug1hHuEseDg*yvV+4A-$Rua;x3Gr1 zyWdMuKIY?Yku)v7viCd zV^y#9j11_--xVX)9#AK>_N1fC1X0hMBD?bbe(# zN%8@cnv+8D?#0op|8HFCpnJ3Y^~41Kvp&StCWtmv1sPR8b9 zOsTukqLjS(z*Sp0j(qDT^OOT#QI&gMy<>zLaN`jm8!omJOgF4m`QNvs0cr+uc~mwn<*@*7cC z;Fn%=Dx6Pn*$xx$&o4VC_ZCZ zy;K{rCb=w0a~O^UT54u;u>SsMuAmK4ZMO{$w-PmYIMa`ueGi$u>dulj^!|+g9w|1& zdG)BHa6~|gtTk?&VCl2|H%$VEMGt5{C_HfdX_H7=@S1$E#N!hAw7! z9+t4As9PP+5+o?YA6BxC40Q2PF!~G;F&*5Q969UQ6?_X=rk;GHFmv7~kKOf=BX3?P z8}17yuVbZpi*BwU?xqd-lW0SiX9Kg)K1G0g^xx7sW&Z3wnY0^%As^>4UIPZma-@kJ zkHqX#>_wRB+9>9BqSE0bJ7ZxD>=U?*GKDNU%R-5;)q3NtL!32?+gTJIj7B0 zE<2cSL)+7~QF4S0&50(w)^%=>dvnaj!7E|zC$cN9iWPV{u z4he-CKDMXLBY9WEl&S$4(6{Gp;~UivSOA~QwQWqh_2|H8~mCmOAA?FjB=k_ zoA@4P2*TKTl|wV_$<+kcRQOHcslAz1fZqINCW>aU5bD@z3aZz+g)-8?PX#{VRHb5k z?mpSkVZ9zt;1a@4)A90^Q=%!r^;8_0TMNH)50p~J1vRhT4x!*1n)E`7z)R}toc(3Y_WM1^Bc=cD zjUPiyZGGJ6(Xn$Vfo#=^vXVvFvF$Qx>IIi3ZhA$g>G=HinIeHQu@C&8557rk6}-{m zX^U__eS!yy|EtN3_~h)O+QCylO4e+!onn_f_SRRiyR~t})9Y%ewkUxF;?^K{uYV&O z>Q+<%6Dv-YCz-!k?5XUM34z`HR^`O$1sy+aNdZ_MgLrxpqoW72FYgmv~=4i#)h}P2MML*O`xTFTBd$xa|~k%e!xgZS{iV%`bO2PQs*vc}_6Y80z@j5= z=+UXd6%g)4zZyV)1b*P@P!jCmhOg;3U$CjWvF{RM9o#zypI2V4*6eIOq1lk5+#AN6 z(tg^bWH~nfwPVL?oVxned_66Wt@fFNHdEM;{qJ6c=X^?2qWY>hw$esFFH<(DlQ@Z9L?i{lN>TgJbf zRMllC$`7>Z(^ba|A1_7k0L=3h34wxHn_D{9+67qIHswVO8d1K3x7Ya9uU5;PVVj4eKJw~u%+Ml40>YZpwcXn$~(;vv3 z9F%wgj24rZPH}xX(b(b?BrQCY+}?QsLfsl!FZ*A@&FY^q0d$w3dacL3PS)}yrAi8g z)Y%VX;?-`Z?d{@%fFVA=VIZ-Y7-Hm!v_aOVxO7o!&v+&kMcQxRVAbFBNW==ix{VME zfX|zPT(s8f8!L<_du8J2cS6o-cY569Hn+OPY!`eV4jQaG0y1%8F2V9O*j#%~!UUd; zxioH6Uoz$*MIMfeN6lxB7x+v-5>5>^^XqbGmsMSu^0Z3iDv>8N=)sh=GZ;PEiA6A$9^nYAgn?QCS;4ZMYQxcpLnWMm|EB50>DqKoGZ`5m!_9`7CW=ErdY zw{z5ijNL;GLnW%7aSZoV2AXJvoKR5gdv>gHHE|Sn(Z!zeeLAslbj){uK;-NhO?63| z{WvW$n7`j$)7k;R5^(zhR-Zu-a)lrS`Je+o&l0!9-Dw)remc`u+6>*Hf#TR4>8c@6;4Q(7b{o>Mw|8>0x!+VF~ui zx*;yn$NUc89%!Vc<4t19`?Z0B6BhrOpii~atoeb|Qo%JiGH;Th5(C`sRy}P_fo}Fh z_M#60DLLbWs(QBXBcSYS)>r-_*u*^$qr6s*Tx|4n%H|fzZtQrtjL&PFTm2|I)rL2M zvk%f4xhf5HKj~{HD(=8KEgyeoS^~>kZqR$~2(dm}aekvpJkQ~`a(E=S6?u97C+6(7 zEe4otG1o85Px2d_k(?v%9QN6pPQ$b23k%bbSSTfGyX)r?p|iy+RZWoW@0BD|8@^^@ z9MFF$joNJJl(3js$ZvvUAB& zg^`bTwnqbYL@$Fy|3F;~z@S-@dx|<)3wqzy3eB4X$oh=?6peZuMOpX4yNE!rw9t4G zdnvVIa@oMNy~G@=CUnKHF4N+AGPK6%i zZ3|a~K{$%%K#A;IsgYKJ@z2}K+YQ=P2cRh%N z+oIcYFr1qel6Z;3-sY}L?K-rC6ejq~?Sy>Ln73#ADlV^TAL%^#K`%CC zO(Y3|oy825k-^Aa7+%x7=_Y>fJmd`W^0KXZ*F21I!2_0meh%6T(Q{3ViyS=b;Vu>l zznn)h!fsWfw7Mt_&r>gfB`!~Au;)^!ZiDPghwf0eHRbKfydN2ur6P`mU zp7pw!y(RU?@363g)lnS9$qK)cL&Xcpe~%i73t7Vj@sJr=HI3~sh(|Vl^N$XV-zj=8 zmnSC%IZ!maw(~C^k{zO${$5^kWezA^_22c1GR|qOZsf{eD=59aT~>C$V(E<6FrK@( zkD-~{5YvI%f>QQ_VNg{iPySn+fdLmNto%#a;c?hN3!5?g&hoT;ZjsDkjKx%5cT&B^ zu`3EANO8wNM|7MQ!|nm@wp&8&%mZ5}oKvRFA4ZEOzw_pOR%c|!j1_QgBNc#(;nUBr zUNjHYLvEPsMM5qS;LP1yi16QM)*rEgPi1Y^q5vjk7@$!QR2r`c76{>*Q!DHO{Y0j< z?+5{KMbTSw?ULgwCa(yKIrhf4PN4_#yMy`hp;6WAm}QbQ$+{3H?TbNT8hKRbVoIyeXZURIO-0R%|H*F@Kc){Q(| zCHAUI0dE(9xu52Q+6A2VnhRp2rO#L6k8t!8mbxmzolo@?F)gti#+o!a*_CCag{Ygm z{M-NhB`RO2B*WfXMXDj-vG<%<5jK}WAVFdHt43PN|9nO#i}TRf z4h~1O*HH7&ZSJ=Qr?RZAm{+@LM!Pn?0}{gmE(s!rg}Z|xt|{gn&)nJv9-9g6Ie{5w zu}eR&_=Mj#HOmuWcp}thFdE=A-0yo>gXuP08n|mt+~Q|IqgTM2`nYRf%BSi8XKM-$ zymTPv*sCc6UmLtQ;6IuZAJ*WvorG$0DD(yZKZ2VY-%R#jf#dwcze>c>p z2A1!}`7*HKxjIkl3Uz1>J=V*#RGwvccA_6twZHaQh1>88dYMPWXX!~?!xB`p^Q+%F zM4wl#3}d0Rf|Ul&i|;8?-2PQ`^&>gZAQz_mQfwE8<_Ysg{L~0uPvcSN%`E4qmB~+l zjTlrcmkFiSj@vid5rpn9Hu+aimQMM-8ykzDra#>9*f~+0BTlwk>4mq(916Quo=rfC zwkP|JeIq$BapslgN>~y6r2f$ef)m${#y#4m#YUnC;KxbJ;7z@{G!+v~kMuw%n{;H_ zAiqy&HSDCK5C0qG@iav|ArXT8h3p9oMFP2g-k!zpDm`yBZENheHH+Wesg1UK?0XW&YoyV9{Cns}Px!PM~2YO{b=85ube#SLKp-V-Uo?&s&yh zI|%x&@*UyFA9Am0zg!09f}=Rsk}(|~(cGNCK?l7N6nq{#-Ybs1k?Y1wM!7S zN*p%h54^aIHnzuwZ`ZmAW4e**p z2VVaLY}e8ran+pB#j)b`?dxA9Y^PIja{re^Kb8zUS&ok4n}}et5LTM};Mzg;^yg>j zZSV36JNoPS%TijvPj&(`)AqY!d~~w4%5j+lrv<3({7+n($As)&In$=>q}*ApaQv;2&TDqJOTq@UZ_8KMDDNGdI8(unf2bLIdIf zas-M2ss`!-S^&BLMg^7t_5f}KJ_Nx4`3>R*(hu?lN&>11Y75!`Mh;d54h3!uJ`BMJ zQ3eSEsSnu%#RL@xEet&dBLFi8s|b4pCk$5r_YCijK!y;Bh>U257>1aG*noJ8#EE2r zRE)HZjDc*9T!OrZf{kL15`%J!%7JQ$+KPIQMuX;sR)}_m&V-(YevQF}5%iM_F~%|B zF(om*FdH#Hu$Zvau`+%}@Lw$64|s_dQ}hsc9svj-C;tuX|4rWqU*Dhvz=uB^nEwACY8=5A;)5P{GX&C55yc{&{VRvB%toq>8hVB;WDfqXou;h>U%*j~CH-;%Rs z^^{$&+t)-95cw6kJ`3XN#YXS}QJx>ob63Z3RNQbaa&imI=8g}Md|}vp_9WJ<>J(}M zqgmU&aU96r*5+@QENlAf*2NR`$ig#!8W2fevrm%lpSp` zEVZ@by0kjQQ1$`8-ph_a^ZaOC=ZatI7X4szxTK|MUe|naS6E@+f=jy}wO7t^UttpL zK<2MG6~VkTEse8NbN0L{%{XSV%6*CFWs{0lpTV!-_%laF`o{YDo^RLu!l;o8-{jwV zwId*+3WC6Z_G5^u|EV|37~}{DND2rjjkG`j0TD(BHudh&9~l|&2gSz3+=5}~@POHe zC}=HW;9#KOF*Q?rvFk+~d`OH_3<${O|BF@f&N(legA4{P20$c0eE(?^cO(ETP!Iq< z^E(9?QWA)~K_vc20%-1A0R049^Pl!B)RsNhW#IA3T7M^@7Wt=* zoU?{T%x}UBH?VC!zK>KEkRJO!Q%(2yU@4rsy_>_t#(TZ~Q)LKZ>f!8}5y}M&c3p!3 z?0my!FWJ@CKFedKWisIVVi2$2Q_IEq-$lF48xI03G$?>kHEo@PiJVWk%qfCz@`E@@ zX)QQYf6shnRIB_cudN`0-Td`?)>diSYT~q0-oHN{oy*e5;9QwJWqg*=9B->ueI2V3 z`wB0o(3#sLUxqE*aGW2Oi#3QBkA`AmU44=7xIcYK2Lffy|9ic!Z$XcHekklo6F-?} zyU&|<<@KNZl<5VCtxcR|bce&=-%f%6$s<`b*@UuokPMS|8jrbBK13V`P>z)jgL+?89!4g<5urz4z>;c_p#Jc9kaL45v*JwnJeMgI^yP#sX9 z2B;Wk5Qs?Vl0YF|Vi_OL@nODG!*1tN5L9F?b*WP_vYgBZyp|rZ5G&Ked-hikTAC?! z;{`-vnb!DK!%WPzr+!-IH7IW^b)cQKDtWd9_tT_3{p>y<8#fU;D<^)NLTaEt&Lk6f z-Xi&;P&IZ#y+B~vmlVBJVIVsw_O!4oq#F|Dcq*9zin+XQLtNMyL@u7OA@$0zTJc#q zp*w?2fvzdm29CmrGTPk4QJU2G(KLf2q`NP%d7z>?s4Qhl0@>mrqFebiMGb*i*n5mg z2afnn`EU@!Xsy6IslJmCGl5*e`yK1Ko9=7XP@?6DsD$vEiCE;$kPeU>f(@J;rCS%T zlDVBoJOgpUucN(np7odAtCNXEqHm66)g>Y_XFmLC83pKKbaE>|!efh@#!=lvr!dj! zph9(r@n9d7u0jl8R`u+eXK%K=coZG|3m|+v*=eSQWNG#TxvU zLU`{T+3n@Q<*y=AmYElb zZFGo5D5J}fm+Og>3i`pV@YrHU68VKpj{(MD1!0O;24w4 zo7xOwZ<=qB7j-!lzGOc#ZyGa5g7J{RLT7yfN+~a9&`DBrTS`gmn~5nZZ{vNEwwM?+ z0TjB^qNt-^{43QD3|OBDx{(R9@xv&gF=p|3ijNxyn)DE=oCQ6u=Fa{u4=t~Ly{5`_;F2!a~#?5G-LWA2Re)h18D_P71 zl0}WT8!zXu9V?3J;V0yqiM2KRc}1cbx(h05xCd=OyLcAcj@H;aNUVoC2m{j$Iv?#> zu$vnn8%VbC+V#X{Q(CQm9Rs8GerTssZNY2*28Oo`Gr=Ze7p6I_UuFf(BY&?}nK95Z zR1~*i!f-a8<2oSUTuuG?V#<%op4Aq>{tHeJNhb}CjF*@q9z~8HFyzgf)*$DKi!5d6Iz%P zH-U||-utM$gy(dgxY)_?R0dgT-`hpC8`3ArU9{#t1i4UHwJ-xdr4&3IJO7$7mKtNP z-iGCjuK*=I6YI2j&#ua(UebJ%NzK2#oy|77o$abCwFyqCn9BHR+nf9fWGuG?QK;BZ zok;%|l>{Ik8pw!6C&B@nK@fz@qDMsqmZ+h$NYzkERP@$@nTm084k|sLd2&7t{X{0R zqF%VR0I_C*t2aWZhf22DFdDqTqK6A^Mc*e^r?C`y9{rrzrhK45nA|*NszKart(Y0_ zgt1CqZYMX|adM2rEb=Zj$TnXMFH^)L{Gam4WEv|n`!Sc3aNPoo7@s)!8*a+XJ++P; zuC_3OZ4N~98XMVoyV1cb@52X>=U0i-P%p~E4wmOlo{e%{$8WK$Zo%p8++zYRGhA;W zgsvQjZN=QVE^8-J)jxiIU#=(e34Gwnm8`9G&R2Gi_D9bqI`1GN2|pqJ?rW^0jPQX1 zh<|q313AiaSs0thu;m0toYk;lN_GMGy+grb(|s+Ib>uf{XU6*~+wTzKG0&}Pd1lNr zBl-=$2P-^nApi7MrlKpJPk>elDFxPic<6$O#7F>U@g9pkDc;vy$vtZ>u^0u?E3at5 zx&r3v?C8HkGsn~J`sR=M3J@{{HX6nW@4zbksowuvLmBme1N$RFrapb^jW?v;uK8_# zx5?xwe2Ee2q4Yrj0C;d(|FhOI)YsoJrZChu)i>S+t-}Cf44xbz1UnF1k%9Gw^&+$; zJRP)$9y2wVF+>fh)4W5=^Ax4DJ?Cn zwSCGc#NP4Ucb{n=l!p7wBnG##wDPY~o0_VcXaKGYbv6E8Nl2?Hi@tgA@N8SeUGzFJ zcaTQm95MQ$yvguQ4wD{bKKoY*kE{)X+>**~eG^rI+R<0u8_pL^_O(QDHF0XtOeNYN z>;;~#Mov8ShZ2m+=^R(81q;&cvSnOo#25cDhADGc#)y> zBP``B-u_vi zJtX{IpWKdbA)sge7ZPwinWsE@4>ctD#jjFaJIiVBQO#krOiXx|NObPKGyl*Q?}ZgS z4*>pw;Q8z+5uStZH@lfFP}ype{Lizr?o}27C;|XI8b4d9uK#S-hjiMMH|c!YNuG|+ zWsmr)!v>H`3H1VmL?ec7_XMG{%f*cueF-)0tx+#%k6MB(F&7NrQPmuKGg{kla;s99zzj6 zMA))8;;A&?XTgw>?+~w4ijH#pv#Ou(S+JuTfhf>O^sW6;Fx#b2@rkj)P z-d}ewUs&r@x;?8bxf$`O*x4$w9`>Zp>GY6YYWOpppm0Tacj>9iMat?P7M zeq?N4er^2~ix2%ro%X&YLuBF*x1rn;Z`+whNU)8Qx?Rs|;h>c+(BThy{Z&%F@&w1yt=VV>r?H~L?6BF>5 zfJa7O#Hzbje%F80X)XY&@YP=+`+y2QQsM%pInqCr8y^i@=8oQ`C%0^%Ub%S)hpm7f zP~X1guWio2E3?dm>`7kJJ;Y@9;7<=tN!J0-=kELQvE7zHBF{AQTJXu*2qOWdrif8+I3s)9ni^D z#kH^$TnqQgMRvcEbW|EmSS4OD{6f0G(M!k6sOlQ}% z*;c`2gC|~H&<{<>%StNx;=zm+u-fT(FzM8F}SU;Atw&ec}8x^On? zguk%zd*;cMfG;)?qQg7bdxubOzFO?ABY$##DF5;Z=IOnjbPqK?S6Tx10xv3_0h&v_Si)5*QLc|Uv&m&^8kq`Vx6HZ+D9Z7L(kv*uQ>6qJ#+Jatmu{(X}0MRx#^&#bGc zv?`WG3*qv{5>wAp~q zyeu*@;mYg1NfecNl!;l@@q>)gcrr~@76o^UA>2`t_o{DomkZSVqAFeMxO7_*+TAVXR&@vmp0(C^bf-eNCzWa`UGR~+ zK|`J@b=TCTJCPppUWG?T`K=1ohPbYe!;jXBud>X;YPhbWAbVyHKOEyqmr!uV5FUQ% zli~9sP&M#E40D+q@0`Fb04*_r`_8-*{Sa>QzdC!$9cdnJ?J$)PVj9ygIf297MMbSw z#%I-d@_-%)xC|n2UXalFIg1c@Z1baqZ-x@sW?&hp7;?AiN&~!LC@{v*fWo5&RUb}H z@GsWqBt#64Xe~q{FrgGPlwpplSfCnKP#vqNfi={`I%?rc=L8&tK&a*Lqh*RfZ%am9 z)|`%MjKklToiz@_KMz|Q0j9#*ET~=|NmXJcbf67gQ0Rd|9~1_lFa(7WDCD591qx%( z%p4TQEn4^-(n2LoSjn>_71^A*xdK?k%NXq^E@^p;F+KmU7RkDHP`SEaWfW{N|hXm~Zm zF@PA!5*Pl`N7wgex`x5E-}&5#;{5RM3QlHHr1U1JW@IGcwy+dlUfD~bEp5f!+)@=& zZs$o--jjQfyyKuUX_+f|EuW^H2)c}+FwIuA7Ecv1SMJJ6S}D_vC-Y9ap^B8;`D`U5 zp|c{XU-><;wdXTRzhT5uv5;X<#Yu=L(aBSLMZiSDY;5=ykTfOOF#-4J3!_p zp=>)B&`oNgTh%Y{*+vwzR@07M1jQp3RM*zp|AA@oWkt?ML&hxf*Sx^fMz1mVom1BE zR!_T^V2Y?zS^b2zqN-vkmdFc1dd}~?+Q4HyuA^o?O=ZR zg6c{!LNSNd3B)WlGyU^Zm}VS6;?&^5xfJmRi2nv&b_S+e)sg*;*yS>@j1;rm$Go95 zYi4Odi=K7jc#RtRTvNAMnzzKJ5=X!bGfI9@V3`|3-KPD~Re70v1rMslaX_ipz|jwS zvnRv}Q$#y?uTm!7BCg|jQ^|XW0=P-=9&-`W6aXEE8G`T(o1{XP0$}6hJGdl38Nm$^ z@`eHUp|C(06Am#1M;L-*3}Fc{tZ@oY{wvoRuP2O5g^KD4xy@H z8>X-eQ*++}3LRn?hmH}TQv~QdhcKmZ2{X8c8Qj7Q?$HW8B0zlv^a+g|USSUJFo#c= z!#7%?Uj*nML1r!g@NfLyK7Od{g=q1$Wv#S`S%cny?^NpV?0_(6K;0a*avL;l?BXZ5 z7eMqTs4rmxTL}tf@rF5ClQn>KajYU;CBm&krE+9l9zYjvRa;J8Usn=eH&7w^`5lF{ z4D+bNG=tHZZm(I_Oxd1Z8ES1!ciK+cne<30gJvNIl{bUEXRpoYm6`I$+|c5F&-&u_ zZnE-yz#6kT^>%#tG;yU)sU|(m-gITGy*J%qwF0 zvF`ClrurB3;(S+ce7#FC#Mdq^zw*scomvf62>j&$E<<@L()7Z|25_iJl%Xv-68Lx0 z&bYmAYH6MDOcC!h?c$hxMs3&GK`vy(AzfX?xuli;o@#wfbv7-KIRXX~h)#XEm5mh& z80$lPtOqAOZ$BE~Q)C#-z~LrG;ww}AKFh~g|H@Rn#!g|Ao45?Ikr~5B1`k%+kCY#m z&UvctPz&wbSN6CI-i_0)+_~YvcbmTRl~Z5+PV0BSdRBFqI11Bn%2XW@zx-b7_svk< z=zwsi{3nOO@1NSS`SR+npjpdej`dRFS&vrQz}42p@HIPijo z7!d*ZP8g-vup0vHdyVha83yh8iQ}uC`=k{4fB<+2i)?e|*0522Vgb~N{vvYxzIH*$$}#0@zd`9@sYKU>UAa$WoyJekvUWOG0hGRWEUQU01{_ElaicFLJ;OvYmA=bwpdi=}e3vRvoQs z2ZBc$;gA4j@q8XurOT`{j(OTniTVZ3&21xpgtWN0;Vz?a%rY*`KSVCCBkKLF%L}_UKE6Zs ze6B2-IycOjkDdD*9SUBke0qJHTAwsWaTy|jj!0ud+9h02CQa(qeCyHSJJk3s^A?$? z)Hb40OeHS(kFo&m%hW=O01m`W>U`l(mEOI&MVGS`yFNRr$Gk?9%fcV@$?Tj*KI_}4(2 zVhaNb85A?tV7q*nH?wjwG%{dmDih>>SdGNBe_k2 z>&pU>UF}W?e~FW?TWAzX%sF2@g}SwcRH~fein4lnagS=Z(G%MhZGzFJJqC)FDz1n< zslQHgX6^%bjlfsvyq=s-Qc>vHQJ^uxp;!p!Mxi z0eKE7Qa@NsSZ40#fn=}vw@v=*B=2|%I-|309^PCB0yJw<>byqjK0Lfxx%hAk3r8I$Udb>}Z zM`Y7?{p}1daY5iwJZt|K!X>oP8{{-q9ZqNCj28_sZwAU{kt_+2=gHd%-%wHb#y98b zgyG29Z@eKT|5)`haQLBitp|tm;>~Oy)O<1Rl!0LuW;}>%KJq^1_OPpBDH=v?-q-K; z&nm%avn1tIe}asG_0dtB7L6tRu=zK1>m&nv229t)4Osv;@U%&f`n;4A;@u~p z0>idTi)zy0wm?(nRX^4TpR)D5>J})5-I4RwZ99w>wk7zJ+@*Nkk{kiHEzgG}5{w)S zRB|aidoc)oA3f2oJsFLDh%xa-MxL_bdps zWg+OApY~XRQ9dXi-?)p+%lhddlq08|R?wb-YPXS!0p#IA!STb;b15h?#~x&}*hPI^ zufliGG(w;^ftI_qcw`FQ?j=5b(f$BqgZ=pZ>9|X>G}nsX zuq8we`gm$TPtubp;aNsPL6uvf^lTJ|v^2*lg=afBPrCb&ed56nZ!TWXmlp?RhZ_5- zFD4v<+>y{h-rC>uG8mUK$T0O|*%g%ps&%67w1cd`LY%Zx9FPM_UU(YfiL%m?5iXZj z%9RuoXJE$RRrt6)$atahoxzI;)htC_?p4G$?xuZE1Js_G9QryU8%d{-89fL_r$UK5${CZ4`TM1(mLOc|%n{j3ObqnD_sYQnRJxfq}C+=~4I@TP6qv(y4P@=7uu8&Gpm2486pIb8DV5*L#=F zgdsRIgy+EKrw}$;2Kg%g@(ku>oZ_SZ9dr;0^p0VKWh&cK$k%-ifqJ(XDsQC0uCCyQAyCmZoA>&ARm>Abd|!(TeFE%I;bW z7CvNKXFJ6s!WC-61>dmz2(_e4NxW&y&ZQ(Frp#e@}HIs+rhh{dFTlS%+v5WH*v>Qih zZXn+U2Q=xu`N|3b)w&-HvIMkSxXiS8&>Gix%&;?6K$$s`xS5pU*um&80w-im_8&hn zeF8ZECFvS6lL65{7)<0#>~Sp&DP6;oYUDw2KT3F>y2B}yiEwU=G3&Vu?FB1}DaR<$ z0s`el)SdnrO_V=j%gm{HNp63u(o-DhYn_Q(Y~h4ye~ByE;g(-l*zW1V2Bu^0f<@KA z9K)=dA7%G%9REnWvU3G1x_SNbE!L@ox!GMe*X3{Ca&@;Z`zVuhJ zB2P#tVm%4w9%4EW;bp`)xpmD_YO~_qaa#6-a7#I~hPaR&Hd?^gE7{M=P8wk$%p6uk z9Q`M6g--(5A&Hg_u6Hi}YxvIASQ76m2t z(VR{wVHAvar$P0vjaYl+{nl>Vb6Xo>m_G0e*EXhQ1HZX$+uD#25H&;EO|1#9>K$e5 zndj}pVgm$4`WFfQ^`Xq)7V|c4U)1DuDjr!xx?r-+V~bU`BPtN05BJaG@s;r$e%7Oq z->J73>YBm%Us_>DV>Qs!ZXn2xk5Gv!3)SWgU)v>I(`}Q!V5OZJSVUySBG&L;U!b zs1CX?Bg_3(shRm^mzpufu$G?^+2zU-kCe|4NFG?_Pvn}1{gxu9qe%AA-M2jhG{Iri zhO&!?b5G5_@I}PVgEx*hJW_Z4wX-$^Z>B4R2@3vB!-ifMH~rSO(zdAT_M_ftW{T&v zo^Z@N-r-4ix>Yull6Y176;)xg|NZEXT->>}-*;qFrTOH^{z8+xHSKB!S?r=0Jravw zdu6_BbrsSFdc1Qo14ZiM9AcuE<(XG}Z@~fvc8jW#s};p!X=RnQrllj3V>^WpGc6oz z8@=Bzf9`mqEL30ZR9Cmg>&xbiUcM#!e&2}y8MHI)6;zAn>4oq>0HmPI4~uhqFaUDODpXLE8Sf5ZN><&1=AZ9!?FJ~->g|ie5ybHRXS@e-DYbk#Xp0#N>2_Vvv{=To%C7S*U)?ce<6=t23Ryi@j;h1 z7H8EYi;l~;MIw>#g?eQ?Wpndq?e=^w^u zH}_SyN||}r)bz@#r)}Wo{(C33?09cZ7hm6E0LpShx69jAI>%vTH&jij8pa1@IUsuf zdAF@f_1Cs97JQ1UH*UnJ`u%N|+#VyJsyaLx{J3Ygh-aO7N5TJi?5r@4yorOOIfIqT z$12PP8p3K(->FQdPt}03{c<_(fBBb}uUm#%%aBPdpmbzS$x9D4b9?%qaY zex$G{|5F2&T;LB`9*Wp%t@3+jY+`lT@yo81aj=FeL5YDQxrSSieRbk3*vEI zDZV#%_^Ja>&$+1$2FDtB5nG`J^R9w^@ufVv$^43tQX@+rUYOxm;Hx=m#Gke{hs&7` zSV~J5E)UZ=GtUd9*sb9e7Os26(OP6%cb2oF`xI*Ml}DtSyt;Y1^b^5yjyNy!9Q0Yw z+Y7F~ji+zo-<@UiY7c9(#Y*@3s_23N0?dl!S5ii}xM#@lUZ&xarl87F$l6!x*e0Pj zWw29~4OO;xz$1mXtMwWOH(c9c*Ktt?pI~N95`X>q|CL=+k(*@7Aaz4`;X>fFiRk(D z;S2azulblBeF*QA?JM6tZ`&7)tlr<>b+z&7D@Ir?u&9mBSh2YVw?<*rwwaR$tu`N<6%S>2%GjM_H#oOLeZKH2!FJBHEYm6$kVc@2Z)uR-!j~9le<~Lv#GsnB zNOq9=GBEJ@i^tGLfBjsKU9T22>=kiT#?Q#r@er5qB8c(>I%S;NWDW|tZhPtAu78(7 zRBqN?r4=W-BNnFDifFT6#Jo^H^Qgn3Dv``zS!0#yv#o6WNbp+7!Qpy_ef?1?HsNY@3hUbVmroKybpi#Tof2c% zZ_N;#Ek5F;bU+!Ts0x!sOk>L)pnEho;V@r8o*7|B*+?U4 zd8T|24y`0--Vx<-ekYCV{deYOnr$5A!}Fgakz$G>>C&mTjVzoOxFgE-$UPmN53g%WUr8L<6lZllHU2B}rWo$N$u<+$`6|c(#ge{R@)Z;+u3^aw^BMZ(3a` zp*qg`*{pMen8sX%8GLPI?!qH{&4F?m=vya#7~8O3^yBcq&?Ikwnkya(~YB ziq{u0CCSjGp#3fMhVkUXQ*3X67Wo!FfOSF`+?%uwo#5CvwXTEAP;HT(GgNk&!DC~_ zZHL@ZeuqtnhwR+BV|WkpC1h`#NfmuwN|+|SSCBBsS$h~tQRLOZD2@k~RvSCZwf2Vd zWsVBP=7*5#=rU)5kd$J6{YK*X&&CgLHr#R9Lh$yX2X|SjF|6l;mxfnj`A6a4GUAOzkO? z5;jY7*ZsV6(5&27Dt8N?g&u%a+&YpifAmd3h1CEvd9{iNxwZgO9bN9s*m+-EWurW1 z)&n6$D;iLB!4mEk&mv8;TeweHYxH)`W@}dvwI$`8yR0OrcAop&YO1BdY^5bXAeNhiI)(eY$x$yQ-+6pFE$TXTc6w zng?pKIt;v=sSS{#c;O`F^+z8gB@V?!g(g^ZP7?PTf1C7xSB&RgZfY;f{+gRT7mc#3 zYz?G^7}75nnHWEuVt8FKbh_R07o%To`^!8Y9PUX?7@v|UUtp4z&-u$s_&9^~9ih&n zmxn3UnrOAxsoM(DUmwO1hH=a;V^d}n9D1ta8O<~qyO`-uGr&h*|M8&n{ZGIBsta_b z&W-PVom)CgO`YgC!?p^C2$|Lze91^%_q?85mmB!YlwgY}UU9BmVY1+}P%GmjaUA5$ zxvUlk9*RpRJlYCLfi`c9TE8^Xm=p2r#=8#BfNNkRpC0@$P{m=wf2!uW3ZHjz|3J0Y zoE~Kt+u@$#C?V>!t1hx&e&z9L#*~)URFXEX4cRw)}S> zLV;TrOxS{XK{v}&68Beyic_!s2!XOu@7BZK?W8Tv)>X?`Nz^A>0B`bpH;Ua)t;#rJ zZJL^me4ECgr8;%>PF?>MkhoM7b~+QVN^uLJ$*Qg|IO8BX<*}a0EFem!+Bpkr`W?0r zTup04Wd60m+7t~2ZK6SG_F8jqXgR83h`5`Rta9dKu0Q_wWnLFNWfQZ}D`9fs3-GHZ zU&xc6!aRR&3!?EN!#h|F#|#K-Oh8Xhw{M%94mLZVVyB9t9U+k2_YSjJvIJ@CQ{`N1 zrKp;kD-9;EBwh~-I49TNU9%DqdwkCZ)bSi^sLuOa;#~u^2i6iD*;kwZ5u%sA>Zotr z@;hP|AHHDEmwj&>Le=%W$6b-?tgq!xJC>IH1A1WQl|D$)KK!sr>~vI)g`do2x5iQp zA5C2WpaYjbIQ(0Vvs5X#eS~SrN5RkjYboS3E>1!&U%Z+X+PJ7w??rBS>{1zaLX83;V|!etuGWVPWUE7UNr`R3XM5ygG7dJH&eF3j*mu%=OmVuhyAe z+XGo|zKYJi5(wM#f^FsPu*k0CPtU0(L&5WNHgu71BVz&BLdb^1niUA>;LYd9d-EgX z5g$Ch?MOuq>^*AxP}~zgd#<$*mL3+r-I9d<(hVNTt}MEFfIQ*PO*?%C2R@)5pw*B0 z@!;k{p@F-->?37Y)yVX3@Ql+Kci)dXD|$5 z%K5S@8}2GzI%h@aI>i8R;x}!NY2y+lBJ}H@PocJ53g@0gzT9goXtzY_R5|nL4Sl6W z<&$>pFs19;Yggu*tBN`4P%h{jT+(kc@GV|O+hDd?6W zcOntn(Nd+JCa`B3YW!`8|MVroAIUiI`r?_Bt=U-ncsDc!T>nuRzep#W8pAIDpQL_w zp8=12+=6ReiJVa22kPyGd2<_H``A~|lop;j(DJgS+a098S|=p2y~ zQ>Dyb@I~i`sDr)hT0j1;wTV%vJYgooo@%aCTKLGiu%p7Q&qA*=>+!%^iSe$-^Vf-~ z8cnGNHxK5WAqW*tG`R!;3WzBAEJ%X51#)Fp$fYj(O7`r3sOLwz6Xj5=8Mz98{p}R; zEO37Z%|QB2xV8Nc(;FIvOAbfh?_-xUHMgE?jOM#U-=g6{=o@iMp`*+SCjN)GLEIQs z1o)R|U57hoJ*KX9Gq-)i(CF@}um2|s$KXjH+KS11MWb8wbOt_8`-aE!_i>CB6gEu` zOb&-ZtuUT;xm@}dgO2udRou;rUk$nvtNs~G9cA%cdKrh) zZ7D?!Q-6Jk#+TsehP0F+v0wRgCNCmlfbP|gC=!L2LVR6u6@x9sW$DvGdR}k{JoT8w z6F@iQ=E~zAxoo#en~~Y!fcwdhawMzkMae9Qd%3m=T_^@4vP~8>5tY>Wml=S&&tthY zg^T!(f)iHXOB!`g-!diVUVm35<-a}g0#)uIS(mL~#OumWaEcnS4JRUIAiR_02)`uE zE@PX@+lO9iTSjhrik`P^by4kiL1a>s@99u;yA3E2@ctNXf;gvLs&F?o6ruQ@gjDm* zklW_E-~43u5{|sI;)6VEtJNbvBQ~wm4_*S!85gWZXj@$lS^a^jWWGuJl}<_@ys|jl zfaAhRgCuXW?FE8`V3!ZFDrRI^E2!iT!ad#$a#0Eu;G`Q$>!yL@^>;61;842=T-8t$ zLyR0PhiabyGk?S6F9R)&t(P8IXmq-Gqv&*N&jn1%pgI7P@IW7?<5ICL=@%F!SkN`yGJQ(k6cq)$jj z++{)ygb@ZOl!9laAV*ZB@6qd6w;I9gm8j@GO3caBNK3$Xyw3gr+F+AOy1_QsT5_@3M!0J4uE1v zf(M~qA%K}_T}~F@xNI6p;Zuba{j87xA)rW2Rq*LZ+nS$4kD}ut1`$XI=?WA)LI+I8 zAOHe*dR#9JO#DA3mi*I+usZ+%3l{n}jf2kK_}?SHZUTS;1<0wY+Uu4Y*`B7pN4iUE zx6vcpRWoD@J?a-^S;{q_Qr}zp1XyK-xmVwK=s5MKxrkIc{`_qOumy8Cfgwm(zzhbE zpIGx5uuY2(UcLQvQrCOpVUVs`6b}`$YlnC>!wzKD`k)__3a1qPbL~Z{-2@|Bw%g(k z#m@E;U_pBkYbeJZ>1g$Sw?7u_O2LM1H1wX$pTJ(dtAYUWtl-KYtZd?l z11}G_g$8_KAcWQTvjQ_r>6(QsB0$Mq*B_i{=B|_e5%YB4h#$KU0IC4MFn~ZV7Gv^< zStj}+nNxskz)Xew-@M50dQ%oJZf4vEO{v9705^ZpK|(QhDOfWAwV2jHmNSV1Y74F3 zV?jnVPB;WO6@u;1sZa#ZoC@Rd)~Rr+WSxp&P1%~@;HmiP%;Kj?U>xo#_3AUGUxzmB z1_>xMQwmEj@3D)huT+{@`>OG=wy~(>6)Ff%ZFS?-y*ap&_&pFs{K)&8$jg>rn4kl{k%S zyq}a%ucf15v{=%?owhpZ5L&(3_t+d7_^>D~WVfY(G6((b#|8BA0aEEO@5&H_^^5`mX+714k}%K4h!Vc` zfC?Is&`L*k=#L4+Xt&_a1i}DhV2EdsZ~->nqQY|Xp$zJiC{@3D_cc`n7@_e3A*M z`bKAadTovWQ{#074gn1V3kQ#Yh=h!SDhmxA0}~5dHV!Tx0TBr)894D;C+WT!U<21_4^m--^~Ip zJdkUT83C&E{3jCy!EA@cYG2ga2VMaJn-MyU{k{hbV0-A(hr{hS%l8&*1FteMk2kyY`uxci{L*heH_Kch$)h{buBZ z!|}<-aedpx#||FdTRL-t!|{Rd;UUh0drlm~d9TCqmX zt}PA+Eg#);%`x&-Ye&Xc4AKU&7hvT#R9S$XO z?D&CW2VS7JI~PY_sH2R(U#2Ezt2i7LU&U9f__E~(_m|7mJo9g5@?qSw)j^0z zKkEoM5)Sp*c*sp@xhGJqSIQwPWCp1sD{?kdEKqhXgfnucuyrt2$?-Ek&JWQ3Tz&u(qmBZZB|oMgb;KMEj8;q-Y&1U~ z%?z@kFjB4Bs5k2MY?TdM{{z!8ua7y zop%zi->DLr@{iO>?aS<05Fg<0%cMnr>R9F2;@IoZpWCs0)9RU|0Nw(Ug0hlPG9hr7 z6{?hLwPJx`l%cFrtC$sj9ybBc{B)y^>&2|ezQEbU%+|7nEWa3#%^)6Q)vEq#p=egh z!2IpWV%$=|otk83J5=J^KA2fHoC^z0smp&TC>BzFt0NlHNKi`k%WDp*r2{kDcrtX8P=z?yWCTos%Ry8B&Z=gyX}W<>i3)i5Exj;Z-CgTH?2=yyyw zRy%e%T$B3NwX;*hgWVyq+(Vem6|G>%znSi@22Nn0Ot(Mzaq>)Bdv5?#@iMFCG#%3!D(_zCwhG!z*!IHTeIdZWrw!jaaf z3qkf}#)bvl_SFJ)Z)sA$9QCEU&CF&|>OE}eBP&u%H1FX}PI*_VD?OO@ChL{Npe8q| zvaPvyx2131x8|sqMxE2uucu-ztzgiociVS+dS`0JmT^&`Qi817x+UgnuG0w7yfdYI zsSF1bWD1SRKi5XW-pRtXv_?vS4`D7jFtGB&XFYNJ+Vh*-|mq&4f2CEcx0 zg^0kl=YpQxKI+umZnb}d?3N@bN<9DIyh2WcV`F%JK)~|@^?HMGB-32LqnCZkLMj=r z9`Rkb)8iGKGIjRHSG`+y3SQ67>wFT~c={hEsBDPNYUQ49wZ8mr+|hjLbg^2&2u+Nz z86%`If{%{?8kQ?CJ8ij_70&G-pU=yPRV>U>D#`+Xv=qIur|5~g6M;ilg$*aA^e2Qp zx>7Cv&F#HWx8zC1A0UMI9*R3%qJi;d$sl3E3mn%=TrdVP*unfm~wxqmjUCU-88mwI}Cq5XR}Xjtrv)VXy-v0Ar>(u9Pfed!{yO zwzX=cp%tD`gQiN!a@dEbo}yZ(N}qbt@=Iiv?l*(dlkc+i{JWl%g6xQBK~oXl^(01H zKHntN@jgciqd6IGH5e`ysB)IMV6&JW0`ivk7rG;`KQqPs&PeOu|#?3P$368V!UQ<|gK4G7qYI@eF+db6{Qg zD-7~R-9bL5!R!(8-Y@$#KR!@$ihe5?bZV^wt$4}rce{kAn2*pm|4ZtlcRNf+AAE$2 zr86IaaBkt+iQ%PIWuAdmV0e)gW~)NnMpdDuiv^;)3+jhWDLee&M@s%cY5kaVGBQ!@ z2x>%?2XpnPml7(_yGiVCdm48yx$4Q0L$k-W*JW~esKcDOvHVa^s;3k^sxFUQo*Ba2 z)?k7^rEhgaFgG8=Ub>J{pc-q{EJU-0k-5bBd=-;?Kh*kY&~=&)E%W*Am^0iVk=_O! z^q>FfYYwS~*!phkyG@3#VN6xRESq>{r-5e%Y=&p@!I@xz4HTt4vpSS6n=Dw4`$fzm zaRitU+cU6*y|CuQ>J3+V>8+kM`LrCk z{o*U8ilwMDJ;mNiZ#vUMel@dUY*_anD~skp&p^mp zwrZ-_$PEnS2P{ccjbUqesNquyl>&YR{+M%lt+yBs)^c4vjN4LpOVE29Nko%Wdv6VF>Ym(I+bw4ft+*!0$TN`oRZ2AjqQVk|Uxd(5+jye(V0( z%RurS&42ty=zofffB*OFh?pPSj!+4-2L>hjHpdEJa8WmtH;yNnSyzyju`rY{=WWjH zHCW<0zle8kpc#HMrrCh40JF65$Hbz3I^A6nq~dTj;e@%Osxy>c)2(Q33%-O194y_i zdX-mJw3Sx}I${=tP^SIO1E(H1vFKvI*7Gmj>AH`I$%Lyr-MH`@I z??APB)&Bzwb1DxS`*ow#;v=-%6jS2~hZ z^Qn$*V&)<-w^vh%8g5K_6$S5GQ6-W?XisLQppe`S4fDwDWqB|7r zvV9`kZX@b&q>98i>RKi2dz-BInk17k;ntLQuWckMNMmU>_P821j zzM=0#&(K_uM17%{UoN(e_m=WevOUy0HUd3J+uG!AM=$&Z_1Uq(R0tf?;B*JvHNa*Y zAnrHtIWhs@jDk6{c?JNy#R3$2Iz|4KkHpfwnSdUVh-5}1#i^c)_cm7csBbNL-a5H@ z>Gnb@(V6zd2K@4{SCExrM=|7;jZq`)@#L-zC{dR)Hgen5<2e$3Y;4W9HWp?klHJ8r zw~rj}AFop4-skUG<&UJOM|WFn7Tki8Pr}Y7F^ic0Tm;SpmQO+9k(kZrZJRonE!!5g zvvi?(C5vY&ZR`4}S6Nz&HQ#jnnvYe&SW#$0V2nrmXUCFlKf)fG3t0`W1(&`?9X2bo z{Jf$2^KLDftMs~b-AyD#DEOQbp_Vgu9u(hOHYn(eD-$QX4b80(0a2hT6#AlBL54ot zJ^wzTgU%t>AwL7t3R!_I%jR=7^W}1tHl<`q3W=f>5;}Y?we^YC#|2Fj$zn21WXb8% z#MZZ3-}aLn0!VGh>3hc`g64E-;v)|Wrs34YH@{iG>$Ic++mnu?!Z>-O!|4bE1Adpp zbhaJGq-{q{;%v_jg34wqD3OEYAl$Pv0~oyhnXJ?UaND?Z_C3vnZy=}z=D*srS;0Mi zZtZz~g7H_rP~>w$q~x#_u_WE>@&{@67s&c+?{9rZQ2cI<-XUt5(E51mlN)_5uagFL zJ~6WN?V{>*`AF+4qUJ&n@(2=Q6dX^;cjzY_6-2Ax{d!nol(h8>7ie48GZAP@K>?(}_sbWaZnWye|MRqM^r%nqAk{cZ9TeNr38e|mhWI0ayaYxBf z12)S27kCpuil0%BP0DW~p=Bc7!u^bLtxzmxfgpC0DeJ6kl1|sv2i#h<`fEv$C96Y~ zeqF5^{szi4bN#;KN#H<3VOem|_Jvm=olakOC@X;rIY{s|rAU z>{Idk|Eg^~>88ZIowz3knnur`i1WWWLLTqRDLc2XTd(boZNB7^z5BF_=&>e|<|fsU zPu`s()JP94>c}4U5z?gP%ln5V`k#abzi~1|T0bYqtFkEU722YI=@^GTK|1t2`-U7~ z*#dYbz~g~faX}CeCv!g;Mu6SJ;fFLZ6*L|A#?z~(U12x_qF*Euk%?Fm6(Wyy7Kh%v zq+Vb0mbkiOAfX7|f-t8U27%!q_a-ADFJYPqNtE+Y+D0lc%JB$PGKa7DgCC1O zYdDv=JCL&4Td!J#7kRg-hoFNKxh zs&yFM#Uj)^3?a~Bdq|K$3AQ$W-i(*(zz)d{xNADcE`LTn? zEn00}vwWrC7S~TkHSv75lLc*}x7c^fl1xWOX31@x6EeBS)A4@iV7$u|j5SmeBxBlB z8d|>Y?Lq6%hW*7DDR?w`0Urv%;q6vnS@z(Q2eZo(F`-s&!j&Y=0~^B7+8tV(7liHL zMCQM~8rKUsJ#c_M50>CV@VcOmd}$WR-V=QLBLN`X8F=LFLFW;YJ>pzAWB+Zve1st# zgA2_c|Cqg>d66p~we@Qr<3<3;+qpEz&mh-zHf{#F7eHVGy(Q3kKIl4r+!cKMG4}WD zL-9D!O@%h_;3HK#KDS!8{&2`21kPhzDl^B6*7^_Fm_J%MB#! zYl+zN>C*#ddAfW&pP&?G&FQ7Cu{^QJIHeidHDC!bhs_;1%z{wPwchfiLr6Dd|1xV6-;`>%f>>dIxw z3nUooK8NepKhd|o#fEqPc3mwjp8g2oc&9}11#&NN+%sKp8jwc;Ig(S*1wvck&!L_> z&B$HQ)5$ZR1EI}FK4iM@7^umcyAlS(yrcC4u}xp78g067KlAqRWHF8>m+|B_Rk;yk zLTo{o1Rx+lNxIEaJX7L>pU9nFWU_dgWW@bbw|3+R(Iqvu^;l(mYfP1i3K)E?Z~DM& zr1e`#HACue47xCJY2?M${K>bxI3k^8G>e$z%u|x8(siw$w|>UBg=t{M_l#R!1sx>Z zg5$=ykLR>~UPW%}06}1!*oNxX+f;bCmyshHhms09{3pRD{OCJvSda;6Eg|F%hV|Ch zT7N4dS|dS`#EJ9FZ=1|Ro&TkfpdUlVs2_enG4AGepnkrUZ$h^b-nohRDH^}Q1tJBpEx2eRR-!xTE%J4|?2<_Zp z7N(yI#o~Y+F}2Zkp7RJ86@XiTZ&kOQMDBB17EUyv6PPOJfEVG^0?7(bvIqe~q4|-{ z#aZMbp*lU8Qo%-V?oW@0Y@{a!jvAqmCqHZaaA3t?&pX+??~YE;$f@_eMDI(>TIjaf-{ zdBcebH*x999vtjF)e6L7meXl6I-y>(4Ro47txtV+@l;8NCvgFt&XS2aZuYBf-jayJg@5rlkG;NgduhX344>04&9BzQBDL5n=1q{{w*V1(77d*M>n zilX^szphBKx8$A~IdW-cePL{7mAPKlY%+`P6+N|pytNN;VRq6rFyX5vOq7FV*;O1; z$fPIWn{4_Az0$m+NwQS8Ky^;Q28$gnR*Paz zU1%X4jmr=i7WlKtj;%M`@P$FP%;2MwdvW zUkXRy84A&lL|}S>iA{s0WS>DZ#J_9W9qjBsVv;^-5O+kj9u*LGP|-KH3N!D5e*PtW z7jiiZSyYyiN2P&#VxZUs2APFMc$wKQlfKJr>SnO)8|r=78-D&XVeiAeL%wp*gp>B( zU&!*$kw&^WlXgku%s(>yM2kdnr85`H+$#WAt!!&Y#JaEwA+8A-`nW=3mh+r-X3?ds zj&PFN+L37YAOFnSqD;;@21J`%@u3JIN9YGJ-dF!t-GAb6WnB5%U$f!A{jxqa{8sJj ze`k9H^S=>RV0<=fr#(IlIqakWepOgyx+t6*p3%L|j4NGZUcS$%?z`;>N}d&2O&qyx zpAop@5x;B8uH8;&+1#~-kKOv~-%K--PXC6~*x)aJD;7UF_-$qv!t=io-;9yhFnlkJ zykM{eH${s95CB1eqM$&vn`XH7sa^Od9v!8$M(5w zAA5opis!)%+@dYw>@=V?nH(X9x!?q1mMHkbyCqAlTTXiPsmXo&N<#;Z8vZvw?sv_O zj9%N48RTRp5i{r6;}{5 zxV7+Z4)nfbmmCJrfI0xE*8=L^1-@9&bO=k%0m&h3TmUy@qGHk=frlQ3B0GBhrAFY* z?+m(D7)B|$Wy_X)LHD27?@}*4a^q0|@r@@w!N&FamLzVy^;QnglOO+khP6pZ<82tf zg7MRK#MwxvxLOH1OlyQ96H&JZEl_pdP2o zyJjvE_7;;#2TL&~(AV`FFv*$$SWyh!6&#>GW8l$!vQYnAclq-9}F?du}}e2BL9)fb_NBbzJ2+j!JgG`@DJ28 zLCKR(C-ZdQ_BV`~szltmpk@fITYH+rZmJ492Rj8l9MG$aN3x^-v>Y6+305ds%ykU+ zH?5dEyZdT4(L%^BT$}8RnPPw(RgwwJpaV15!aE0;rcE{3-c4aS4hlRblj zQH9hIOLJZ%KP8`c6dVJ9yT3Deo;S}>hTPcM)Br~tQwZ(klLVUL2x{u;iEZ8L`mMV7 z@I%eTvXLKkO1dveyw$PUBX@Wx*=1~x^&4K{YvjQaaUS00lc~09g-i-5L-N86OJ**) z$Q!tF`ld)QT6HmsBHKtlkNh#yn%t%>XiX-pHPj4wX)VO)+9o6qGN3V;@*q{$^+(;> z;zf&4g}Q7N4a+0pQ0GXeTj;7vk24rIfMTI_BdnH_MJ8Uc4M9tuR^ z%OW2oMOa=`f%`?fhfYkFlu$t4yhq)zy)e`IA2S7_O&al=or`rUBvV#D zBJ%X$ie23SE8^+xFJ*P5I6P9Uh2^Xq=rTKkK0gxTM4^IPaw#sSM;*`C;JpVEaPx@1 zbY*X9Xein1mdu<&ZYN}Rc;lVSI^KGxl1eoDwaboj8|@};2nCY@#%%@qoI{6?p+1WW z&O%QsuRLT53X|hk!!ERuq-S>d#lo3DA z|K6}gDv3tRNfAt%hC~@zk1Jhpt+KhrWaZVdsi?`e3 z7Q9G+6FT34f)!-m$pX>ZiK*fQ05(P6*l@eB=H=3>=# z>0!6pCK1pxyP?O<_zY+ROYh;7S&9ym%Pyditr7YFX$X)iyw{6s*WUx8hv`i)#?d37 zhRp|}c!txTEKr>Dr0_xV0?(LQ+`coG9)_GHWZN7Z{vmjIFhY@s6Tz)WV z=#9fmmY>I-=keWwgXR4{ zm{)rSq_FRgkv0I^(>)PIxtqQ+Ihm3FjB)lWuYgv|V?D}$ zDAk$XMfFCC_l7Invi9c1Nt{=p`3lsZ-~mmhL?BaR$*x)_%~)4(y#< zyu%4k9F;T&`8c3qK2_Qa9&*^#Tf1+;{C(6^5bRoZeTv-Q%qxPbPw8Z{?z(}QVkU{g z2PBfaKj|g;VuueNk{G;6-M*QP&DlfE<(75_W4v1t{uFr>9^Dd*KIp;d4P?Do1j}Bw z3ui$o10!b>CpCr!W=EOiLWsEoinl^xp*;bY{&j!JRbLce>Lj7g>nrG>({yG#?M#VK z?K@DB4oC;0^kZ}RSV(8rkSYqAqA0t^O3i{-M%_N!l#K37(}xgP@NUCAkQ_;7YSAF{ zdU%^2yg%-7QNe%AF9^7y59tu%Fz0_uZlc#Chbuo5ZO0u9g>dE<41EoHU*Wj|z|2z> zjO(9h-gOteId{CMqNpfW3a-fYVQIOTP9+QUsQWX`w?3c|G1icBsZ3tU*9>8!|Gqa? zENct1yzojd2MxzCYPYT3K_nYRJnTcDQLW*{eNZ^c+zr7y_-VmeE%a0Sa_7!na0(RN zo%7`CSPFpR`=HBuH=;WDsDXz9#28&Ox88+3kb>@YF#Ly~ReVlS?nzPSq##ATN5Sz# zdG0yppvuXlQR%80x1LhnEJ}^epP@78{9yhbkL^jw&Ym!guz!q>?B4}3a|M)Tp+0$= zYwc21Ug8%=gOz|Pl|(I2366^XC8~4ZF_$(_s|W{4I7~hXUh7nE>pPKWM9-h-yG`w6 z{CCv}@-Nhm*CX@46Y_wB)zU(*&ZYnox0I1HNT3vo2-r~8kl}waz|M>1A)}28&ScC` zsDhJ7_Z)L=lq1YGN|WJz5!MhzMF9;6V$da1Uo~!3!bEm;8Y-?%DbC%nVgtRssC{6; z#Dt=4+3Qy$5weqnVgtjN4$G)Cf7N8qVO3m%_TI91_~tQUNRp28Y;H%7b`EZp<1+h9 z#UItCujQ5>iwfv+%yV)9;}xdbFbnX+1!*8V9yvEX?hBmf3?OkXqcN*u{!iDA4Vtn$ z-jU5sFIlfT_Z;$T@oa|BTsE(|x8vHb>bNkuv8$_nZ4C*Adjb%XW+vU;y><(Ou&2AX zi~Sv6Cak^KuKnyIp?H~RfUNl;&Ls`T&rWCsEO-E3Uj=Z6S-SK4`@ufUn_`NC8$dI= zAr@-n)Sz$pBsgUMly;`|_t+9Etx@ zojA!p{OgZ}MIF8=x0%SMA}Y8T9hc-q;FRTB60F-8{i9e=&<;P*?h07(uf}@o&}L`a zFtKxucB&!9e_k{QJ$<@oD3s4B62dv(m%bzzRJdhoy1V8bbFx!1eXpQGg*vJD z{tuw^FgOs$>J#!6ilEVS3DO5PZ6uOsu@&ZdmLuWdOMA7Y!L{pwS4uS@6XlHnI%v52T z)`ITvd6`+aKCO3a6hXfJeaO(a$+tx_f^RI~hUHIt+TIedU|De?6lCcZjtb_JGe$Cl zK{-xM^k|&rDPV&2`{Ip_Qe%C<#RBpkOfS^xtAxlKCc4l#{_2@iXMW-h9U?lb_A;c& zxr~jqDG*n4W3bWmQhQrJ_S~cYkpiuQA z4T=6Q$5)Ui*@`IVtY3(EhFHFVP10&liMcoo`Xc7@EvGw>>asFfXF${i+Eg;BXyN?h z4y?dHy&;@+`UFj&OO&K_?sJqyR~OI!TJX`oa_ne{QY3 zb~xn~h3+9yf#u4jNKvqESl3etWra@DiX`(<84b1GMlzb2GD#5toeB|ko!L&%kDv!vxUNZe=1WNQ{Abf{nMrXT(Xb8ai-Ll9SKspDpM+D za=o;V(SOo0PCrdfpoa$)WSi5|X)pka#atED(s`hJgG4$>(Feaq37HCQ{afqbEOG^P zDN^fqY@x@oV^{>p%!lJ~8YYj@Pa`Xv0*oCY{ap5FAqR-(S*(|zk%D;_@M+#1*?b_T zRPsiAIFoxmoRhsY9C8`!3>Uql(QtW_Ju)?|g4Y{&5x*7HWSOldnw)sS7fdr*F6 zmn}RRwRqpzsneb z^A<{mxtr$)$!F$&#n&?Nh{{5JA;f|z=4yfsvr3KC^SG1xoruz}cM@a6+q)|x9+4*B zZuo0s6|9>T1Z#4Y2aS6b((f?>0&ocTQ1}nz=U2evP@i2n=Q_Vjzft$YkX_Knlxa7q zL2P)F6Z48u%LZQg3tnWq0jid@iyQ$T|3JE2*Bo@J)k^WJb5KzXxSs4#3#Y&0=)Qil2X6RDO`E- z5+Cdnpzn6PG7isyMF+iOapIgO9FT=0njnMwazVdruCSE`OXp z@+j@VqK4KNNvvn);j&xJtR~jr^pZ`NY*@27PDsG&PKa~rns-D}Z`f(ZR%1m(cQ^eD zpL1h=`?^iL^RN7Zcw67!dN|vPQo$9vHoJ_`q64vb75%NNK#P zFiDG-KR_hRpUs##GrVg8!p&*Oj+l=2`IrLE6dp#8=iJ{ z!0L!dDiyJUV%4gz+T39pZaQuaI!L42BnLP)3{LrFIJe_gNZHFV)7Z}zL=n+cZq$GeZ@G7aw{^TCr+2j7+$R=J49_L(9a<&Qjv8j8Iwr0Ta#pa|JJ}&!h@8 zc&YkgEZpkq!7}Bd=%(6(VM_My8>CX{=mF$^T&q_u#=1B`^Csu&Vviy2a=Oduik#_m zkMfF5arKRcIMS7FeLs~CSt(5|L=YP26R3E-#JXu&8_%p=oigveyY(seWPFi)jOCywS-ps7S8h8jlrMp1A zc4a;QKV%Kuz4)RsrpNK5b$F5oBiXfmrhed9RYL4x#lrFKm>C!zA|x1?o7JQA zx_Ga5W-*C`JM)T8TXcsrWe(XYA_`*%2xrkSl^mLtDn?-U zsOcNqT!BC=q0{3fO~OLZrK0=d#gazRn@~Wd9;=6`%kc~N;2g4cJkR))D=hY4tQ{7# znE)L?c}$~w)4d9rlHJ(5#OI)-Lc?_M)!y;KMhl!}n9#r4J0>IlH{4^ux|??Lc;Wxm z*p5E?-^6yek$LhH`W0|l2lSfhk?r+LMHa=`c!GK_TyXgDU^+*AFmuDc>OJRuCi8lT z+$eQYt2^o|_nd#gXkmB#z6W;X_q)Cq9Awtf#9zE6@LXU0IP-RqdoVJ|T4cI*enY)T z6sNc~n^eRzXqSOMUWd`T6YE?8d`7V_k7+=)3S1y8jZ#>543>O1>H!vHVzq3gL0%A} zQM5CWhZgCd?es<6H(S)dPzT5EOTKJVO1 ze+hSm+2~)w^ZXdT#ZHL#_^)+Gp~HMUY@}wjBzb z2=iFqd#)%Or`{dWxlh@e-;tut#yt`5u60_+&CzTodUJ=?x~chvX7dZww{jbC-*uvE z;FgQvJiY+8a^ndx^x&zPzI#)OlDfBV=E|48n#tfF=m4uo&j3H2paZJA=Q=kLst;K@JeRePH|-(OnpFWVk<(&xWye3v5ZCQBARQI`Y9RCc-*) zo?%0v#=66Sm9!}oiqHehW4A&n1})H5!^SLijh<2{l4_DO*s2Hp$>iZCnQk^)pMDBi zcOn=qeV<(YyT~@YHK@?*$E!7pzbaYG@q4U`;}Avk6WGPG~RZSQgbgXbTbK1fC7Q5!w&^ z@Tp>EkncdzXq34~Fc&@D7L-gokq56Dm_S1ymTY0oI`GjzYLd2+t&g>yL9cJ_ihIf0 zsr#TL1?&~F3?2kD*z00fJgrxdn-euTv;UUeb046B z4|y%_GZ0zXv|bVKI1T}GW)Ko8FUOYH9?Ka=5JRvnrnWLfrlK=v`H zWT7aT{f7Y9m8bS51w|(Ctm=b1CZ%mtb5}(L#TeWjOE20Y8YN>*P#T_*$Q|xb>ru;n z2a#rmrQjM|puH2Tj_*@wJaS_~Uq9ki70n{@iB;;u_cPqy|FF91giI_=QMm`*#&8#8 za|+TqHqz4_Wd6%SR|?;d2ncR8YUdK==yqa@G{O94#mw38+npeJ1cVvnu^RO{-4p!a z2e353eaBp_Hitj%R~@&0K%L=UB*+swQR?GxvJ%~CfOwb~<9)~b#tm|qL45wIFEww zg7#ov$Y!^o^^YwXld0?)EJmb7&Y4R(d#5*Sy0WpufZC{c_C|_>DD239vx&~>BS!>O ze)4feZQZLX@w`L~0q4kzR1k=_VqiTayy~pB!+l`&vBgotj3vhoNbZnldR2Kk3ol#7 z8mfwyAieS;s)AzBtxcWU(OJrW;uHB&=Z;fTnmZ^`P}|}74a?x1^WJK_1MxSk1Cd`9 zZ+!Jt@y7Pm5i;v|1ro`070P+-tYe!$&Sqv1awtJ&oWD2F|F?S&QO9N2qNa*D*!#wHC0s0fO6&|qoAg{Z!Mw7?^bK3r z%{@gX#q|rXk*;#q^mk-7m>$jJ^mX*I?G2(KtS&ZQ@4}<`0Y3Q+rY3p~r`ufCX*h|i zl6{@?P%w`FzwC7fT{7QCJ`K;7RZNCWa7ci+D%mbyr4CkM@&&Zok_9BQT?~L_8_8K2 z@oih?dawzYeRs7fV(BfE{Ha7H>{mR|?u0}XqS0Wwqt8QwRKt;!=#F({G99t*4w?9Z z$fbL937tinq{vunBK?~u&Dvpv{hz_&tXalE+$49V8J<5=123UQofAFmt$FUM`)-%Q!4jXQprrW;!Rb0vHKBqnjl0L6-a)m$q<}uUkPSg zBO`1dCRX)I4ma7ilEX<}@pGB!k<8gk2~L>A*=x++V$TWj3w+n6ELNNA&kc4aLs)zS zU4AaEV2A{Y^MAydSMBgbe)y^_DPDDa;SNw;7wl4T;StlNSx1_zpcQ!T?NxaJI}WA{ zKF-P9-?kxtL-cmk@eHhTA?0WzEEsMS}=69k38 z{7yI4bfcd;=;s}_ee=Jjw;*QT;c#FTcLT5%GN{t90UONDLwJ$nHL+YDEV&@b41xt4 ziIC`=d@q>Eb_!Two*J?YwQ8WT<`65`x^yHVkaiS9Q?qWr;Ct@N8Et4TAJ|8Yl2;(E zP%z<<6t9d1Y=2;J-l^piHP2WuQt!zI;p=L}-qg|xat~M_PSBOwAxMHCdgSRvcVcsk z9?{(D_l{iEDwpnGV$s9;DFV`k#S&RoutrK?1lMptg~(yCe6H{$S`0r1;#blxzt@9O?F(SnQvgzp51TX ze$L5Qcv6wohJjhjVlCf@;&>Pb$B@5j)&C+cN%RP_t9mChsvejKndtUqi~F5&bgh)r zubZ@D14bfUUZPW~@1OA?taNU_%T3e$JH^k{5BKZ)nbp&SNK6oCY?)umc>U#)r>oLY zF7DlI4(_UTBs)A<_b1G)aCTJCJ`~Ct#Fs0HF0ZS1C=jKeB1A341|kxIWXVAF7Y;{6 zii@P%8y`@u*|O8)a@LpPsxKf4duP?yXnEF4T3@ciFq$FML8;{QIAhc|683t60X^E+ zEQZ~hfY?z9@*2ma9{B z&E*@nPHsbiIQ*7F{Uh(OlEP9dD60HeHW$AggLs^TBB+Kc@QedKc{%67v z{gUI&j>jDi=z6AuLU>~{;)S+G9Vmfs!QOa5nbY3n(gsR1eS|X%acE&;stjMoQF|M% z1tcn99*7+7=UNqeL~@Q{O?M2Jz$VACg42wDFj|cinItn9crKp7Q5a34z=-BMgxlDN zMF>=Uii+85o{mUT4|HHJmdzbGbOUsYG6iFy(&y|btr*!f6fVx*AtmIHDAl(p@(Deq zpmQS?i@9^|;$R}F4NmLCb%-dKH!LdEV5wZf9%DUB{ISlibaz#FwR+R z)oJU%-1*9r)5T_f#^UX#a{931F{oX{7|SIK7M2J(k(7uLl#040o0`M~J1Ys{q6&Xf z4rypdLhvMqskYjU4aq{fg!+zIS5^= z3Ue-j-sw&oo~fkxBU-r#3f5PM^~Zf3z>u64sqXRWneGl>++$)Ozj>>sj5mx#Iqpp= zf_Ew@{Y$d5KkW3!vvD~p_M?qS2m~eS5;U_jX#_%UtG*ID{>Z{e-PwUnxfyoMTd&o}WM_`(s$~@8F(3 z8>!x4{yHNh{xQk2g{CO@*ayMKz(^Y^3cG7=G{G~1D9D;DMXp=x!_pPQUEJH$iPIlq zOPjEd`J0^{lU0FFt_FfJxG0L=HOB+!jWMy_FgxpPJ<)ms>HD2zr*k&TJ(wxrWE?mF zR8aP4U17*znBZ2JLltymYbOB0nq(Nz>@I9w`={j5K)Mmavc()WAPQW$(a-!;wm}Kq zcx6CROpc&f1PI(0`mG;wrR03No>0qPZ7?`%E65MrY*aC}WjcdkB(8`*vqjB6N%mU8>qW(_ONbYrmq zt$3DtzmF%N@Aue?jGbkj_mT}y2h!u-Hgml`3eRl)eGWuUaDlmi+1WKV^SwS^UxPiF zOt@RWpo4+~_5Jg?k|~*2^Q7Wiu#B&P_;#QQ>YT^2*N0VIQ^gCp^+KZ9H(b9OxNeh< zGx9giQo_<*7jW>0T91F|0#d#D2Kqc_ZAP~yr2QLMm4iebcQchNcN4)wXC=*n#s#*8 zFoU|tlt5e6Vm|ODp&`i!w77fwRpHB`w|`;j+!Nhh*!W$R#eX_;C&Vl3gfxmFN|kg) z4;V`q?OWxg--xN2zF625I{EbY^jmUS)#=8z%Acbt2yY<2X*Pnt*il~8-4k=WXZ@0< z$?0L9-)0bx)0f!ZuLQMO^@z4V>+^@bFk+63RGI_@YeCOuPea zq%I_6N&j|I?YKTNGZ`NfX-IZ?RvlbCEz5qrl2#}UiI{*hOa8fJoq6nbBKTa$Boc8o z(ISUq&YX%i*a*^cBWWlk&x)OM6K?Dmi)Fx~5COvw?5Car#BAl0gGcm`1xKZbc$@*v z6dSk*xMdJRw=s8vO^IW*Ffpi{xwcT^|;TYL07jz|HS17 zPS1Rg;k2-6*=yl+L~|Sd3kbm=o@_%59Alp#a!!*F>_DSfkY<3)_<@0GgUjZ^%rE}% zIa#6SWctN>by0QsRHgNI+go2fi(w=a6l2}~-$$`8G(h*?q)@*T7;gP;b?aA=ONfnP z&2Ve4g<;-bw4k5S2Es!l^N&^0N(L2;H<|9EYEAG~b|22>?aheB`rW7Rgf zCxlLat}S1HwyXl#c5sJO&3|iX)669W^VX_j@5E-=wWcOx*XRGv?mpU8uXkn0Z^XG~ z*xxn!hb^$snaA!XXlS$f_TRGS9t;r!EXaaQrpxcgCWx}CMjNwLl~ILU$lY+CgsC;eqAXX!#!TRM1DJ%`ZphQ*efmT%#&QaN zHrBHHkZ2Q$i?)I-llvWNb+!@3uB5X6-j%SL0`ue0Fv$E2Zrkly1?u*O4swvKM^WJI zFb%+w$s8Wu(fe=YM_5!KQcbvTnW|#tE=OU{q~6-t+GG*LgknI#7RVT7<-LBH<8N6V zyA7KmI}^%0i5D@iX{Imn*w>$##7TtW`8?$G`L z3Qf%a56mRXPd9>&+=yC z)&s2v-CZ>-%Epfj4EK7-VR9+!miuVyIkhK^Fe4 z5bNS-P82WeMqL`y@5efYQYt&TvnuJNvqiNIQEMIXj&-rnTr`hW)U)x-b zcif2G@>%n65sW@*fef>HR}%XMGl>MMYkzSmnn^LOH(yfDX{t*K;pZ#TJ!L}yO-W_iYiyCk)XD=yFVEv!&8ynR4uiy|p z8$%I}5O*{Qs&RTWIXzZG6*RHAy%q9#7Yd3T;d~x$F;fya>cLAO3m24fJ4OIuOdrlL zP1qnG#`BTqM9jwMfu9vAcROu*+_%oeZhC?wqjwhiNjKNsXA{QRT^|HtEEnQnxI$-Rw$4`4_PkhX1+FT4aq;3Y*g2hKU%{e2AOPxD!fzfR zmV~d!=m;F)dK%(&M95&zF>lo%-!(!$Q^i3>Q{CJC9H|U++w6X@OVQXJQWV=Ax6-N^ zh)Vn(rR%}nD3v12U_rD-|9o4Bo*3;l&iuL5y~vrLqH9NbX&Ox8DlhVQ;>mQxrGV7& zCnjKWB)E|zbK5o#x-(tg{!~oYW2t^GyTh~f_6$-U0+P?71Xoxf6HoNDUd|LWu~1aZ zdO5;$Wuo;8xL}_59rL`Uo#1WzW|(lX9gna8%tjATVIz(iq6+*tI~ZBWKr!5)i;4*W zzS?FEAK4-b_>~x$?0O#SQ}G)q=H4g@F0MpwEP#E3v2p(kdlbL2=Y_LZ-R^VOp5G;J z%x6R~o;8ek4`eHB&@<5fI{ENY7@Cj|`%6>;+MTVR-Km-WBvmC8@ddiYlNa3aw^v!8 zr3$m7c03^Pb`1tB{Av6`0Z4%txvVy35hu}vrIQm~PW%Ltr<}A>qJRHNPnUY|q_1=B z`crc7@{yVm*|KKlqRIZSC#*=5B(kXBQ@ufxyx7@Is(PurIoaiOx~+77M@Vxn-mDPM zO-IW!@49Hafz0>Pbn%kuvDV{@`>oFLe6VASMGHP}a{YSlOJN^m;5Eyz3NgaQr#8&2 zV-1!d%_hK>$zUpLAr2rgdH5UOKr8nTe}K@{*Xn2MW1jw-zY+c9B1r`!N$Bb0z1*7j z%ng3oULWJ2yc4E0{~Yzw7CNtHS>>o5oq{b{Nd#!*b_Ze&yWbkAh5B(hDs`>meNVM#~Xp;+2*DxS~PbaaCv8&3!VwwA{wClwExn8p5wuD$c! zSqn`WhD!|M$Ax@OEJ%h2H1NjD_FYx&tGU>J-kXB;V*O3Kb~jGkMI2{7ZuO*MoBTiY z_FBjk5qkVB;H<{{4~5&&d*#D!q>ezLkq*K1GAAqx)kcergitK|8^cr=Ms>P<$EUD} zp$?7xsqOc91}xQlrfFPT^|9=0J|cg)`@tzgz8lKy(1I=M%S)+;HqNxFW}|Qo_dE5%vpiY{^pK;L;8!wU4Q@qq!$+2uQJVS4H&P zx`(fC-`$3CA=W!j^@AliLpE$n$R%ju%tA8`$j?h^kxZ|{T`C;(p z@hg?Ea|MI=7dZOG0>me=74a+;J!>|e^aexjD>rOIB?p_`BX`DtKC}ct+sEgCw%4tp zSJv?|x&R{BW#3^hHAvgu-_>k^!&0&oxOn;8Y6eDy$@w_C)FSB4L@e9B8=G6%U$cKZ z2?ADZ%ihAOG_0hvcjtfVsk6VKgfbXuFGj;3YPB)jUTa3!Zz)+%KGmK{b^+pZzd^(; z3e+X67eZv#iu%X>`q24%sDV?t>+ARbpY5JD>xh$A$V)t*s9;}WuDOA7$TC}o$<%0; z**E0&nQccRh#7uc4WJ`?p(eu(9IBs8?~`@dMRL@oDP~8AOeB-n$f39?W5v&~NfU(x zech|1!wjUzpP$a48z&p=Ff7CP-_?D2d>qAY1m*yTxW63=;mPW_uK1Qb{&FJ!p zd`n<#jV0L@$Op27Ic+evF?S%4gOG$fA!*qhhJ-*!LKYH|4Zmy-2(mYu1Sh{uNU{(X zVvY9us%K=$$YA#K`{(CztE#K2tKNI{>ecn?Rgnaf$RV6NF52OBWM(>ymz^Qfp5;T^ zZ3Q+-_9ogcx@}gAU8b}E<1*h_osZL_-b!YYe1jJcY_NN_G`H@_e|!DCYuDY&el3cZ z4Q|?&e`F8xNTfkm#AbalhLFa`p! z{F5dn=#EYcKWHK2V9fJ22b+3ZGB|Ks+6BWbFJB847X5v86OLlE53<^uJUF>qG<9 zkl2;cN)NVd_$)I_Vu(+pF>)b>fZ3K1bi-7uVX6KypE(}iwCwyqLC9gifzC}Gj@rdb ztZoOa3c4~f#(NjKbPcOZ%a`wR;yRi0+co;l6|JVqcw?o}>oZYmKl|Pd1KB2By(HQ< z`Lw!@bv8)~hegfuoLs|7*|}v&b}T2>XJ(g%4XYYkdNXic0#BC*Z4%&w`TzH!vAh_z zc-6Hi>V|j|P)A_EfJBgr3w)db)XM>QPtU0h#PJcSUUQ+#34s7g{#Ll?k?nT~Y z?$#v^CT3i9-qzKnMQYH}#Rw`bl6J4GwVR5u8| z!@YeSMJ;8|STA)MhBEb~(ai>5u5sNCY{RDl`t`n^=DHUbZ#0S-xoZsKV%rLvR8!!6 zP>hx7J&97UW@gPzjlwqj)#S_oP#O#R+0;lMJ+6X?xY&;3i2$C%Mf zV}#i!@P$t}doK!iOdHrYaN^Pet2anZ)sUJ9RV~)i(2ORh2z|{&a+4XnPV<9M^1|&` z8W(1HCMVAF`*5h|P4))%MZK8zVPD2=N){)JOfKAC!`Df~7sZXxW)xDloe=hDJ&YEB zP#&{s^t#PxLq3*)&0DM9$QELu#b+{UlOIF}YYOe6!H$)4u>?018AZKu>c@JE8`cz) z7reA}RgQ{tD@M0e3M2_mdt$It>0`Cd6p!(-ElO%*j%*_{*WA*nF`0Z=Z1E-kCK?tP zjA9KeH`pA;spMAXyg_4dTl6JUe-{k~V;Y0+i09Fck~fG=PEs4;sv|T*#t6#i&Jk(; zfPpE51m{;&>u3SlXvyB&-sQYP$%NNbfPG5cIU}u?b;ESA=*W5{xBMDhad*!Uxel zFUbait~x3n;^ljv_|LEVP&n?2r5UX8GlQ2brP9TXYVp!JeZ4*D!Zo;45T$o?m8S}) z+A9$+fkpsU>A4=AhnIjN=!gG&kw6{3(`J7S8Yf_*c1(Y0eu=uMs{C<&j@D?a&ILu? z)lf<3Di3586&R%O!rX${QMN3(Zb?ZIk0@#=WX^6^)y5Z&*Xn9k+s(D*86LTy@KkWT zRj$Jg1vZ3oI^ph~CUyhlj1Z;04-Vdp)RHeP2G7r1Mxoc_TjnORoz`G?fEp(QB}|AvqhyI^}# zomWw#<|I&sFj$=%LsB8)^Ot-Sp5N+sbS`Jw@`Wao?9~}O7ER>5LYr4E(K3%Q%b1ZZ zRsgt_c5T(UO>*wS!e!9dv1l~jjp4|mcvEkg)>0F8zQ zSEtG~aJe~yzuM};rBJ)j>D@L>b+oEMs)Zd|$RG$QP(*JV>cR<;`fhEpCfDS*W?{~2 zsp-LN&|=%edu>)=C<`R zU8$5Sd2~*l75Y4lMFqHg%xY>G@VRRco~d^sT+>h_`7#{FcZ&?nZgX1DYqU=P9wWYe zsLdMa{Hr^RXH%nk&^ekOBAz-`>(+mARhwz}sSX(DT<0|Su`KYVc`tk7;~N+uFc@4S5wm*PLQUc9?hm7-5h4SFECl<&K6ZFW}lycK!*fvQy)yfeKO zw+3E#PHuMX`OWc=-r89fFq=Il$L9Egtm=)+3i5-erK{@a=}LMW2CHZ(IcHF3sVTNv zN`o4|CR1b1u&weAt;)Q@=lHt1xCM&Ej*$aFbJ+!_tyh%@PqF!5*TGc);oge5&)wcUS!^N|a5V)M z2*$%Yk?t-##rRntX~*n&liLdg9qh>%v`+K!Q!}$)rkgA3x_`PJH?=*7T^@{j@=$A` z^et_v(GEsBTG~=V&reK0N9xSFw#{h~_h6d^m$r%V;VZ7(CI@hjd5cy*b*|5f1$=i- zUQuOrV-D-`dZQL6zsb#M(!p2;zsgMvR5do0+cU1dS7%7RZ}b?ke{ONQxRg{Od=|9^ zV=TOfz-Tg0z#1^dBRE<}VjHU%9|3MZ*ohXj*wj(Ian3Dl_K$#+Wyc+C+WRkO9=$Pp z_N8pN2W~bjt<#6F3vvNQMd(?v1On~|=Px2@Ff%#?G*(gL``Acv(qT2~K6`KSHJuSA zbGBeX(&}_rl7CPBiDk2FNHdDR_p`I&Ev{MdOEaC)nzdik&~11+wi>3pF|yL#^SLj4 zUTZjW6mQwH;7^U~N<@wTIv##flgNpwQ$STim_Kr})ro-|AWi-$`FD#0qdXX<-(WTx z%~OwIDQ3gRMvpnH7K8TlU-;ZTI-|>i>n)Q{8|ex>WAbU-x$-e_7?t)x$s&95FV z&c!b1Qm4hVV0#BF^)uJ9Cl+AoG|*i;MmDAl1RvDR{3}{Z8UnN6z-%*h&!VblLd4T! zT&&LBNhGRDL*agh)sO4hix0ng$n6UMU^MxDrq*w9s$kh0)-`YNigKni&`{F4!jCOt zdoGi*8=ebbdr1XJbmo+HYzNviw-HinKznQu>FRFY3{)`i_n2 z%oB>#`M-g6n!`^TJkHJwy;hy`rat47hY^(g!}^7*uMNs`*ReFtEwTKPg$vf~#Tq$Z zz0x@bmUM799+wtig$?6t=qaE$UJ0qLf;WlTOII9()N0j{!x(}hbJo-46 zrzYltGeK)qOtjvZC@js@jjvnjfPE9tmeeM-1W;+N3Xrnq}u|VxQft9<)@-! z`g%(efMeRTpeZaEXjvVr^LWH(&YHR>Z{q!i1zSa2ex&C#-JfPw1KlQW8;7_AM;-}c zEdFunNlSm9FzHD~eYcBx9}G0z?(uYYTOH6->F)NO)m$j~7kfrmr`9bxwOyTNm&Zs- zE8X1;Genj4P5i_jPDi7mI$U$RH*LVd2iK=}!~1cMFmwTQ-kfl8b!~GlTkZ8GUr4?v zUgh;nHJ~H*APV1BY zg9E#=r`R&JAHfZGVT4T7i}}R;$rqC^da*Bi3JThnnCkOlM?u5Zqik;!y>gflzhO_} z4yVp=!r%o2e5j5V+=;@EVulK%WKpUN3FiK23{C}-E^6Q!s}suyq83-j1X;kTvE<__ z3mDS$F)RaUV4@4z{sM0}y-bp+Q(!zlT;xPMn|v3AXNs=H5fCqj89@N}EjxC`$(kT6 zE5@_3rhWmn2|LfwlQs1rw&XEBx&oGWE)jfK-6+5asYaD_)Ip_WOln|;b4-p9rmV0X z1=}us6BSTXDh47}Eoy!K0Z*0rj>pKV-xGJ*bGEK~6qgwFi&x%*HTv-kY?H{)7;pX> zR$)wcUC9Pm@;G)*K78~QSZ00fc5{B7`L-wQV&R(Cy$wt@-*ttK<%me5yK_a^)GaKa zzx)mx%ho541=LYp8tMSe`AIg<3o*?isn-e!GP(yqJ1>;t^Oi?%{@VI#oX*>ytYz-U z&1~vwW}XkW)@wgI+A*k0K5*Xwz5ePs^b10+GzuMOh6YBr01V$Z)P~ibqc)1QI>6_n z!-u2=Cxug1^`rAc+I7yQ7p}}IYZ!h#dEW&NTPW6bh?Q$udHwM4us$;sGCwx_v+Q%W zU(#cm4|*mymfOYhhV8H4J?!&$o_kqe=b<0zk=yp+iun1P;@;$w!#~s5%Nq53%{44NE%@cVnJ3mk&a!j`bP%fUJJef-gYhV;L;{)A)LR_+I$NU3Y)& ziM#IkTJpK-*2P;EM+@fzY{4Dhc;fEczxj3Cuu@gg+*Vq+nD2$5PZY1jUME)Bs-W+} zM|vJl0JD1xSLmt=y>64sq?-8q6SLufxaPh0FohCtf>pme@4z;#S?@N8ciyRWqm@Gg z2qzYv#_UDNgO~`{1R$#dHMF=c?&A`|2Rk(}lMH zjW0>ws744$=!&%sQdN3eh`q(-4)%F6pe=T4bpn0tLl2Sksld*?SaE>7g3)<@*g=)< z!OE(i)>UULpgPhk69Er^#B$4wNmSfCs$L|$SbPcaO)WlUBQ<$M1@A$AjWp!EdHQX! z61H*Nw5p1o6Ov|pL4gmBqJY$gHi+RYlsGbV8QKqEFHrh#U4|Jxy&)8onY5v}NR+UOe2urcNXL*!WRL1LX%S1UDlq+P>4)M1+;|iga9L1Zbx5OkYbw>X z??qwi1c;?LbJKB|+C_X4uf^VOyG(z9l^nJ8ljyFbMb^{=E0lzQGuSke z)#=O3we3TT-!XDL%O^dTfeUf?-ac}1AQ!TS2_swDS#l2OVgSsVxo{g9!DxK{KBop> zvsc)wY1I)LN4HdzDIS6GpJlcefA(XHXYJV?bgE^*6Kp znc5-PjI+|wriXvoRQ|+)T-fel4r@ln*zdxzc=#eEnlWO}u-Lnct}x_`WR@&6Xp9+l z*L^uUo$dT(xQ_@uz&=egyHVBpfXF~G0hx*;0fQc!rmErmxa7*txDx`o{7zej#U<&o zk0#$*-S*1-l;eEXf9<=XoXe%1<>0Cn@{g&qVLv!kf{uHO7YzA7O)sG1bH|2-eKHbXJ3QYD}ZU zrWsq)d`~EZD|(V2;xcQpGz^IZ3yli|Csy&WN0#bWQwvg9L2=E9o)%TcXxI;M^h29$ zHHx?)k|a!+OBA}=jp! zkC)xiv!Hjus@u!P$9?|(eemz=_dk8v%{N`qaj4_6n-5;zafn($>-2t%AAU;fdfI#_ zq+m$Qd6IzPZGztxN1BDHceE1v@utGt3h!UV&+a!?N?yHFQ&6aJ>b+8>WS7@v8PA2P ztFfVEZAEt3LLKaym~%Snw-r`*H5(n8WrmDci(3!dmbg?@?{0}@1RVj1+4h!}I`qpr zYg)q#qn&nZcC0tDs=j;8+AEDrrQq9`CH)XsMvyV--0$#fyO|?UQWY2lRKmzd$0Qcd+@i4dywQFE{66yU3as#PqY#-7Av(<;|)zut#)0p9Dk*UDID zw#c=^H$XQQ+Ce(WD!z23#jr@ionK(z%N{ambdOx3HOo8i*6O}2z9#wVm)v@R(}csJ z&I@i`Qt$E9FS%t0-6m!*8T2@>{P|zFjiXxh5u}Cp{2`N8d&{@=%vSluE411hz-cl# z?R;<=R#0d~owE=a2m%mu0jdvfQbCo65c>17A{2#)6{-F63TLs^qIvhK)w|7XRTdO& zv%-=~+ddF3iu;0>8s;*jwyiPbUA%r-)b6e;V&e_{8J3Rz&7E3re*?pDnM{MYV|8my z)S;b+F%5-_a3p$rXU8_1Cd_N*9d;#psw|rEV)Y6;>%7%uka-%cCaBEl!o({Sge@A{ zD2vwaYl<|ju!s#UHyIs%sE|u0I~G~TaM^tmmi@8#xgIKLFK4&b8hw2|y-)@-X~f@Z z43b%MDEVQX4cDgMajWCPK^w}ipAN9=#NT753M)7+wK#hfblYoH6$q6za3Lp}fvO_G z@RA|ozM^Q07!+algRzUR)LKyUqB}!N@6zv_^oqTAR#vx-v2EMMpNknLP4Xm*Ho|&~ zCV4fk^VAz)r|UWC0s{irL+n9~m|T31*I#kZJrx+9inw`mA=@YZLKqgtsdp%qFrX%Z z7Uk!BRgn_q>Ii7J9vWpwVReD3AD~mnsdlVS&Df}i#61eB7F~lo5&1iDId9oDIu~6% zs(0|rR^xOHkPyWTt3e06w4%kTaoRD~77fOrtqnV8c9#)074-%fIHA}XkJfQ28O-}* zYXQ9c1D3O>m4A6NCL=bpTVE&Xa7B9rT2gh5TFeIS#%j7z+t#MhIP~(;Mp)D`qULm( zSewSEQIjNpKI4sN8&1U=e!6#Awq&(C z7QTMM{>RrBI-OP{22s>|yrX*!=a;Z1pZCc}-zs4)Euc3ZGJz_N?-+%>sNmK zkvCeRhXN`f>IX!B21GappVrkpwJ}0n1?EWjee?u#-d+AqO8&XP*XN}ccpFrueJKGLiadJv;!HJKh7@5y%)HolNW`e-!$ESD% zRvFIv43%idg6}q3f2f%6EETh}4e98!JX4k8q`9Z65NOE9K;{hRs&FO=YH=Z~1E1nK z2((j2jkr=hkmIM|NYtt4`#2}^&KeC+)sG}e8OYnUX zNKkg3bNq-afzYufC-geccx;Kw^Vbc8+d0C{)9dkUvH6(VJncx<9DbN{Tu!{}Qy~0t z=jX7@_irC1>*>rh`;^@$QfYp^NPb~1#piGo1UhB{s-(gyC5<3pDaKbx^6~6ieO@3) zOPDliXrp7#xOEx_=@xz}@ilc7jwH=G|BS;xXJ@z~bpjf@Hn39r4O(ZXGx1)`Q&KZp z7*tk|knm2%J3E~E9Q0-2cruOLEMjngd!YGrBW&~(?#aC%6V^aAWo4|etPBgV4)@lT zTit3QR5*)b?J8vtgC>cD1iuAj(eIjLRlo3XWC zklI+Ex{LQHy#ErPowdon>N^@kAid>nFj{icJM1T~I;E^K3&wm}^Pj!n&dG=Ec6FFX zu%-9g)0?AwI67$Aw*4_f zyL1_p1Js@Pli!~OBDnYgSfhFivoWkcr}Qdj^k-Mt(?;8GU%ro9#vYE~| zO_*)w73MFRe`8r=x!ZEo@(=48>s8jD+MKq{wudvSG9I>v?3?WO+uwAY<9OWhCuhBL zh4Uikbp<2&vU{>0$o{i`i~n-}Ul$bP_ws_j=49rq%(*4!x!j7}t8(98xOL(Gm5byX;KtyM!AF9Vp{&r#(1FnNi=2yAFM49pn|Td+hw}cCza{_or~Tdy zOW~UEQ22!ccfpN??S-E!{9fTdiuM+F6@M$zT9RAxTB)UUL+MvaPn2ya`+j*&`Nicw ztq51_uXw$(y7I!xFIWDe%33vA^{eWJ>IZ7PHD9eQtsSX-BkG9W7k#xZr*5q7mb%yK z-l@0O@2&qz{Ywq3;lhR!jiJW+#tRz1*!ZI+bJLQhFEzc{yrB8|=C>DbU;KYsGFvva ze6!`f)^)8&cj_oS5MbnUBB-(bQg5Tx;J;<-TmF}e=dnExnRlXmi%^U<5FdrZ`qa0o?mWS zt}Or63btbDiu+b(th{#R-_Q9{kI=KJM_DDVf_@6|6g@-Ee~E6+XnIe`kWLUI&Hgv_ z+vK|j8&}p2(4m^&6~krsjojkVik|L$0`xm(wZ@2?bK6 z5SFOyQ6Vh8i|6NfzY*`(3Ssu7kR{?SDCs(cKPiMY?TACT)Q@;)%H4#x{dkv!LTMaf zLqeA3At4iP0FO(2fx~_kU}*vDS#bB^5yUdUyI;s*)BO80Jo_BlIq=6LOH3%>8hYM}g)JVGZ5^C*V@?xCSoO!GGcz#j_RZ zmP$joae?x05w0V;0rpzTN6H6&(?U6?A<>+|PPtWBmlUM8Pw|KF2>67aHJ}%0rrC$M z7NLR40N?B+-T{uS^k_4{Gria?5n#3R3qlFy%ifqyioX-O;V+_k!1si&4Q^Y?O~3Ov z3a2#W!iYpGp7c8pOU04D1^MODd&(^%7j?kIF`)@An(d4qiXgNRxi*Rhl7Qr5*C)G@R@5veK}o%H?6R{gh|wJqCX# zJ@e#6__g6lm(wQwgu`a$bCYQ%TuOm?(*KwjH-VfGzb&9A6c54`ghQ&!jte-bPwAjL!~b0+2=Ca1|NL|6Rp{B; zF(|YO@^M*`r|X1srDvE$7KGb2N#MwrFisN$nU_boAPoDl5`T9K8mR#9FAG-*I?Q4= z3;O`;SA|D~uL~2xQH1|WI41l-_-|}YtP!K)55*seZ-{S6pONmBJ}=!bJs^EmdRTf) z*2yN>EoaF&GH$7oE9GAXGN97q3SbWa!zYVcij?E>^fbpdF@uM~@%Saj<9*<<8hE@c zz9Rlg{Ec+iEIb~P9+h!MU3STt@&Z|&2anr<$76wS2VMjo{|Y=r-~m&-L1z&5jZ=7p zKZ3_#@PgoF!2`kTfyW)euKj_`@_dmN8%5+2k4G5y==?@qrk z{jKSv(@#x*bNVaOcTOLgzJB`R>BZBz$;PQCroKM)z|@yc{^{h~Cx3tPKTiJk#>)P-F)oev73%vckIBi3y#^3X^x4Lf17+~^7oU! zojf}E%;eLPPfZ?~d}8wJlaEh6Hu=cp!;=q9-aUEef zJb&`M$#s)!CYMbvnJk?wnKVr5-}>8IZ@#(w&8|1w-)wo){l_ltk~ z#a8)!&Sj{O|KI;9LPS=Cb-f*Zvb^l5U|Y3J(XBbRSE=?Z1%3Tn<%8>b6)`XItO0Fw zU?8-`9|$NypCZIV?T0~wcz>)!VG%{{-&&%Gkx(EMC{d({Ja|OH1(~t9;)=`t{jmwr z9gj`qNpVGtuf0T8EFpN}i9tovbIDO1UZl(Iz8L=>r5@x*(nJjEN2rxN((L0NgRN73Y;d$@pE;~fJXimszKph$UrtIz92 zV*kNjS?TFPP-~xGR_e%C*ViXcsHp)_0fJI*vQkd*<&^Tpo?aQ$IGB(XQ%`R{LS%|F zk*}6~wf+A7zP>&`sHIrq1B$S^R}q#`;sD!~`Jj9dWlfZ8^FX0hz5PA@#Ol7@P+y==R$ABeBF;~ANr6(L z=p%|TUVIqCNKSPFUPG}E*d-K8DB_l_3L5|*ioU2sF-By9)&{gR!WJX}ysiCxl%&6% zLu-m0Hrj-EN319?!#L*1Tt>2}xv*k@5C`i0a>v0?f-030TkunbD6$_wrlCaDh7#>+ z5!N$&t}Mb=_;?1j*&o@6|3k4ORvdZiKo$8zfxaRzaYkf96g!l`M0<&1j{pT(Rx;vC z2{U+5LyDc=R^!di>&tiT6_%N1b zI6rtI=t{+owY`cn6q7p?s0%7qH0=JE-2V)&nupSaONhl{L;*MASYpC$C{}JR_6Nb< zUf}2{E>V1u2}W)v=uK``WI`f0J2Igm*B_bClDi->p(8gZGNC6oH!@)$cVT40NN#Zi z)KKZK==wqFkX)*;^QpCzD3Mu_-kHdY)X0)qk@+)`qiUoa5tNMLGvW!Po>EaIJZIw< z0Ddyy3IacJL%@&RMZk~TJm5!eKJX(q4E)F~0Dj~a0zYz#fFHS~5xI#sq_T+IuVnVi z5PGbicp?E;DJ7mQk0@ouN*UT?1)4$^ICkC!8A{ZJNU(ow3b12|Qkkye37f8iI8Lc3 zn!xGEj$Q~ws>P~VWEy!A+JGhYCatw6%&v?^FmAEg7-<@&$cfP)lF1058+x1 zdH{iWzv)L~Nz|1n(MYMUsYI#!q@-Z%0VJCJ1em4+uh?{fZ8?J-4}{WwBzlSJK4$2SbV$ohpQ# zCZ6!a-`@xMaQZh1fCl*=>P*!6LnxsWc*5bOAisGE0U#ujbr2$`3@sQAJ;-U0Ajbst zRs@8EzbQ$2sw^-|Q<@eSgeuzn6fHtcAXD>9lwyJ~k>$=%7ZpmixHuihkx?nF2y1&w znRX z@}rcf*s1v9y*+;Psd7_a=|nkmqusX6iCyjQnG+kE6Px~ac7CUS5sxSh#j_KnKS~$a z9#I;L4}$%O#}1;Up9wZpXsJ>T5IZ=^#K!q5fx*)Dt3U}awj_BG__Vnh@q7gAoDqq z!-CKWPY*ndJgXvyanu5y)$s6;HI$|cA!{iOdDc-H@~o#cVhsmu-}>!&iwlb|xmvxUke&j6+AhG&q{ zkY|X}kY_8UA9DUP^Ft|1&P=Z2sck2iDdTS6;-^!6;R%Ct``VmGeBgy6+ zui#Pr4C_o^N%=)gjGs>VCD?!XPRg$la)pyAzgCE`?37$kg$iR-HEp~NI8s>n zr09gZ6EKrI3iyZcbtOtCNE>*bAN{su=Ii-#J{7wjxs7sMsSFwTm*Q!JZw$Y!fMgu* zEaBBDp2s#(Uz!pw$!CMY7+MHUn!`RK>6E+3*cUYvQ=6v1_b}_YGH1P z7pCeeF{h?xmmERadqEk3OBPmxmU}ooFUH?NgrsXuh6ZW^7*Ng4S0BVlCe%MsdC#2h z)&S3~$bT=sALZYxDMpZzxN#>hk;)o}pSWoheu9U}S_4j94)+{zKc$@w(egPtP`%90 z3k2IK$mW(S1FDPh41-S-!WR6cQcqDN!Aop|^%hDwM)&FhGUBY=@R#AY2Ut+6+>Nk3 zs8wopBQv#I2FN>s!T;tPh#nF(kVDs?waoJm`^f0XkxGJ))nYwc51C^Ggl1U4u;N@$ zhG55J+llG68z(?vNda;%3;Ni8=(FcQ-Yf)G0U;=apnaYPyJ}(ZYaz6aiyX)TcEZD^81ta!7!cz`O@^Ta7wg zE38A^Y=CU&gTUkxrV%4mM)v_o~R@V#nvIf@3ns9btvG5LSVXdr<#aNuR3lFgl;ZD{GGl|_~ z^qMVW%Y`qn6>KFthxG`LuvIYQutxZda5r1a)|Ayp+sMwxwI!QbKTEJJ zIHNkqhS*lvyV=f$84NMA5w?TvWV_gIb`cw8d)OEoXBWfz|0V2Fb{V^zUBRwo``CVV z6}y@pVArr~*>&uCb_2VS-NX*Eo7o|D3%ixw#%|Y-?;I{KZ!70+WmQylIzFNC>`_NcIw>+_9%V0w69Tt0rwQGjAA;G%cdxl4L?UZ`94@*6JhSd++ zcy^WL<(2dfw<_gUr`(#9Tbpvz>DzQWhIfvS4XMHH9JlTSta2NyVjK)HpSt zx(?N?SF5YCUS;0O`V^M+)uw^r(E+g7$oQUA(psAuv}1f^YFQO6sccK- z)RxMrt=fu$cMt6x93B{-p+;Nkt9Z43aM#$WiioT1RvAylcckF#=u}JVRN<{ESL3V7 z)l#d`& Y{My=5Zj3WbM|mX<0#Lulu=APmKiR?A3IG5A literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff b/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f38136ac1cc2dcdc9d9b10b8521487468b1f768c GIT binary patch literal 29912 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 bnfbLfgSm6Day;iB;wah|00962|Nj6Fv8wea literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff2 b/katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab2ad21da6fbe6c171bb869240954d0ead8f68fd GIT binary patch literal 25324 zcmV)6K*+y$Pew8T0RR910AlO_4gdfE0Liof0Ai2;0RR9100000000000000000000 z00006U;u_Z2wDl83=s$lg2s4(`b_~g0we>7TnmIU00bZfh-L?l84Q6k8(p9$#9e#j zay#&*{AZqb!i{nEIFLFLjG|^yR#~$D|34+^7{d+y08OLnKP1aVk&cmYh+LTSpn$_E z1CBKUhXx(;t@HE&$&|WJnIW@OqKVmh88hLPv?y>}N=NO3GRf&N@`?quW?!+oJVOxQ z5M(%s#o|K1?dWmCdD*X(En&UgZ~Gt_YA^Nvx~wn%5b!1mvj0#^sPUTb)=5uBiepa{ zM@C#m?v<3t_GwDBor8v<ttQO?g=!#O_g2#tM`J3K$P-v8VFqW@nKOE#jm5&c;t zImW0Q^h9U_r9`no!bnamPVbB}?({-V&$u$`JiRtAy($LX{5}c6LP8)wpoZ3I{h3ux zT*ogqj5^JCz8()fNA1td9=LZUR>1qx6K~4{4g*f)xHy7d7KIz`4CS<(k&^?-P6~p; zlMpQ{@NfY^v-_L5{sv?#w238S;()WZ13){{^i}>{`-Erb{ic@G-7jf^E_BhPN zlt>z-oxOEA@1B=oe8=`38v+X$EK-^>3^bbq1mABhf0CI666W;1vn64x!~&3Y1$L_c zr&sw`Rns0{A1{arfc3$CudWOh6_5g7nN+vW4$y%^dVK; z58e;kU~zxK!!d83GNKVCq4k?7Q#mQ{M5H@a4(ONd3j}uH_I4S&O_<-{_3=;qyDfxb zNX<}8iS6^`a5!cZg$->0)^B^QbZQ{-W_Y1Y@R%{!e1dC_TUHRUe0RL&twDV>P$sB?z9jlTDbh2`HHuPsM zIl#>vCZ*h!k`m@NM_`M(vcg6cTxEr+GZn&Ay8fT4Wjo|*Q>VRZ-K|}PTy%Ht+}Ta% z(&gX}Ko0(Z0RvJu7*H|@^3D>tyH5n9XA0B?Q7JgZq@^}e7qw2gyXU5fv1?s)Zd+f| zxAyy%&hF&q(-*pmml(6x%3SJRXhoPbWuP0yL&#bb%3+jb{?}@CA-N^-Oh~3J|MfZZ zIT!D!&Y6#3GPj6`_h8n@5L)7~tW`CE#ORGh+jxKw0qeEbZ~xy<{dX~=-FEVFj5Uaa z5^}-I=-Qv!aqPFg(tT0)7q#mdg@GVFFc@V498dEk5&%EAMgZ33LqD_x15-(HdOz^v z)OUZxpK)dtiO@s#kCJsLmeY}y0UK`=0HCkj4FDPLQ$hs98x3T2#0vV=_w+-YMg^8* zkG&2$?3gps|NEZLJ@zNmMsCLCrM#9O=MO7gL4`F{Gc{LnDRD@K$Y?U2Of2)4$z^Jp zPIgz$mUHEpTqO6C$H=$J_seJHZ_3ZhKak&600luoQcx6h1*Y&(NE9-KQlV0WDv}j? zg-Kyi*cF)yr=m(xt7uj%RSYRsDK;p!D)uQ3D&A9ER{W@Vp`; zs22u43;a9q-;mUhqhHA8=K(TM<%2jX?&1%)uKpf;1-=JAAdLU5eT0KDSVom$GLg(r zCi{oc!-wSO4YN=n{~(m`|UGnlTjP3x7sQ_y0q~qQzB2UbPf^1QIN-r zksPtboYe68Oy6G05|yysZgD911CY`YO}qFY0Iyho_CI&QMn$6GmUk9@j}32LnfmCB zO~hgU-M2fV{v<;KCAbwP2E0E8_T_tO*FOU{*4TZFOXOP*M4nCzG33QUcAWPF_Xt)p z9srb8)QS*H%d#SZc<~h#px;yGFP+ks9ucD!G~a4zHCIIZx&o;Yu}wYk#cDu}2BR_? z-tdC%!CpAMyn(YzbnucV)5?BuHSF3T6WSQTT}m)uKw3|v)jHdu2Y+;UyZm$LCdSEP zLTxwr${Dx$uYk(syIJ?@#oa#9k~@p@JCB9}&D682ts2ecCpb|eKW1Tx{C7PGv15d( z7|9~PMYdElD;q)Nq+AeO4+IzHwhy_}`8XLLr(;JJ((qW7=e4u?WQ5@?^u!(mB}J{G z3QR!ksUJg~UBJ+k2KvtXa$X*V*4GqC#6|BZTEJDuZ97~jqS7^~cKyQ-PUQ6KLy9sP zZ4u|~5IdLV7R0=PC)WYdQDSY!^(yM1$0=VG!+nxFOZ0OOTxaQ-tDvrAnmrf zIL7k)*_iZ6G4SHJxD~-*&dF+`Yd&d+wKRzwYQTpfQb_DExR8sAzNaOq1%qDnw{p^3 zii&5Q@%8V7t?RP+MGh=GAvQR3yFE4|%5E3D6K`vtdN>Md?DAzzv!a8J12pHmwT)ew zngF%jb>YN{xb$E>a$6i@d6A1sml64?I%O*Q+ZTBMH55D;+g-AutSWkVza8FxS>Zb0 z9rK>vM*)K0xY#m;Rq2Mg6C>Bc_i|1T;i73Vrns2nFF$gu2S z+Q>O;sWOBCfm%uU4lMv&urVPCj(%ZE`@ggRrwX+DHBgvhLfe$gh>9W}Ma!pwD;Gpn zy(j+ugthn+CI5-FJEnUj3J9WN=<<+6c|m<$_B*~joC4~B+ z)XMv>K~NLE-co40anN#7j(yyFc(OhA`FTrmij(lMO;`_h0TdMZh72ikC<-W=P_&?E zL(zev3q=o#J~TT5nq+0;{K%-F6<<4S!wEM)9OY|uf((z2caP7@6u=CTj3lkgo%+h9 z=sYJgb0;eH*lxBR#A&yvX<-uXn}^Q4Z&ogEZ2(VDPj2EAY_n@GAPgMKiXtHYL75r9 zkoB^W0zW@5TR?*uc15t_KcI@+sIN2?ce+tWMWeKL7X^uQ)Qu)6ZYk4m^WXcn#tC7^ z-Q)I}4m$}hTwK%LdmxbC;p}4nur8`l@%Obj+RY;an!E!qWWR>mRFzs(P^2C{y+7$a zxeR+)&!=vS^ZBajy=;dNxlmRzjl3mqsu=I-%txesFk>%NnR+%nH#x+3FE>!#PlC!> zS*B^-b((PcXyp-Fc%2aw6tG3a7zkhWWCwQ8#CZ$yZY!I0FM5?7Zgcs71{*?M&7h=N zPoF&WNMw8putA7m`AEzhF-fM;^W6+J8u6~Ui@;REt*++5rnk>q%m6N%=~krB(!G3q z48#`>Fh02%=x!mr>I6~)1X6qZkfC#P3uvq^ljM&w_g%c?+;!V8^;WF>aj(F=*jRQA z?nh3w$*;#+nmNPI*A)rjtomiL^J}hQs-S2DPl44o{P}5CNAb__g7yc@bz6mjcG0_QNx#!%+7;*=3T)6z_h_tjt4f75Qdx{$+6GJ3fM$K zm~#0u>=7p<%mr*w0bwcVl?qRM?SbBa2iOXFXAir4ul5+05Cl$(avX3;0h1*Jg)=H9 z>~PK7*E)CrLog;NfF;m2cmPMZ=b{iFJmb}d$hZ4^6m-zz9z!us5+()YDgrn$KqWn5 z1}WuH#>;XDj_42`sUtw00O@(2lrAh?S-P?G8iINQsCPj60h7@uM_(L$bMzB}`UR*z z!14c>@M}G*?W49f;KuQD5bwO1j%W<2YU*jL0SN5IW+2r;dxqcx#U3Ayc>?q| z0H*{15Wc|-JoOcrH-@klaUiWI#%ggr4+0OBBsMEe8oL<4i+EAGUJA_P=!9Yv4ixCg z021$4BCNPv8rymWPw+g@(vliML;%H&2T7E&0*?n#6KhzNa<;Kz7D`MMs29H|4VRCF zp#7_h!oF3nKX}YHzc^l8 zy=h!I(YlZf$%(yEjC^}yuYMoNSsoQQ>?uz6AQnOE?{dPYqg zl+AwST-9k??`c#W%`aUzb2V9>?y?T^E!D!#Tna`;FQQx6Qvn9tCzMbm#y|dC{CFOx zfRo8nKTe#(c7Qx7X!`FI!mpJWMvw}UH~mf|o`9GLt;G=CaD?aar87Av+(%%KgNyKS z@_p2=ZAE~V*G=EH$+FB#T&6j*hVlQV0yF)jV3H|dr-lj6WN5u9!iMF=sj&y~mUnSN z1K`zgB1^zYG#BrN?9m-D!5Ymva2&}1(Q5<^>KqMS$h0W|I={$*XeM#D85Gg06~8z@ zGHlDwfF~d-NZogk_1oBOiHxvS=s|?gf8cyv5MEqHiUvTSj$P4)Y%hDYdAsXvrDU#| zzWC2D=Pf3q_$s{W0MQ*`T8XrrN9r{?G#EBF0D9%l$=jW#Uv`OoEhJzufJG*3B;&=V zL~=_wq$X6?3hhTCojeNEIjYZhu$SAZ!L!V4g%rX~fv6zI;WRXrr|4Rg5lVJyCHRqt zLXo~ZWC{{9NG^plapdH#x6$flZ?i%@&@&p0ujzh#9HQW1U=`V|b%mE4_cWH0FojIc zkSD-`ckco;iB=JJlJIZ_=zy_!h#g=c!-ZcAED|Jx92V|*dM5{wLeqBDmy@+}1@T$I zw;RN84(Vy;tb#dE;Oc^5xoxeN<&9PkA1Czw{mKAof{XvhF`?r?LA!7n;u*bINS6Gd zHCq7rr5o5ap+X*{VAgm24NZpzMCb=OO_VdCU;3Pm0ZjiSQZ#j5A*EBFyha*aHVZw)9fzb6%BMhVWD`b43Rg83E}^uK zhgFDo-hr^GA=W^eOR4C>^3}KqC#RLrh~(8UfsPLJwPRYq81(J1NXS;3T51?V7Mqpf3HAKZfGVe^;Ov#Ls_@TP>2= z^u>>U`culxx0>(?L*=`FP&EFJg@;au+L{_Q=S<@IuarHDS*j-HJnXgg5zVV?<?ulaNwP$j}huNLptN20)+MH(BL9LHIMa#RR|$&Px;mYIH_pkfx3>HRnF|LW-EhDU2!yw~O&>&~2Ys4skZ;DH@V^lDEw>c@}w*1*s zy@3W#+z1np!qvhRezqCxl@Yb3ay&S1!?v8R#58c7lM(i%)R9rT(lRpe?x=BD&ya_D z_N)2e9~%Z1L1nTUSc-4+U~Z)RsHK%AgxAOYM{tVonxgUf4fwuprEY+}+L};a%12ks zRrn3^lHklPN4iZs@Y`!XMz_&-f&$NsfKm61VRMyZtQA?D)-3Nu&}jPD*@EdPNH zZcK*6iVq*R8!7qod5~mqR*bTm0b*+?binBdm7m^9?x|JjG8ZW-T=A5mYOS}bQhgtdTO7?*e7E8&n^Tfm`-#j;f*_lq3oBULYhn7YkfV{EqThC;8w)A`>pzGDxb z4HP5KQcp15_$Lt%YD97*uZi5spBaO_r}h{86O&mOkj^=xKH{n3O@-bjRRV!G#^av` zEJ{w5d*N>>#k}iV0p@#ST9sRcylgSkvFHFPKmk*!+#gl_wEr70A*LTE@j9xZeP}#8 z_X!w0Wlz-8m};(ZmV&GwHvoEU1^x;qu>VPHw=9E@ZpJ|d1DeY_d1j^AUZol%c|2anStpGu(v>tO~m%-E&i15v4?3|F6qU* zY$G)V9I$nr|8TYF3-!!>Rz?B8wv4pG1e0CtTZJK{AM>Im@BQqK!|tDut|9 z%r6-M3F$mel!vu@v^3T0piBEa5-jG0BS#8Rai#}R7vAWdOGi<^_uerH3Klry<{lkV zyHEhjk%GJx>dt5;XO>*pu$yd7k&gO^5r~oA!Y*q={ge3xY|7ux~?v&Ksn53JA9t5EQq{Zy0M*{ew*F-#`q5 z)oikef(X~KO9f=Zi!q|RtypcR*gZ{1B#sdeCy>s*63!$_GOXbm{{f&7-rdflBEy>h z4Ml$s1vQsed98dT7qMo4^T015lJ*MXkjat2w@?+oMm?70KHe|5#3;5Pc~j zu%KHH+`{o`Ww^qwD*@kEIJ(tm6q?(cd`cCnl)vFKOxdEdBDsS60)H3%_X6`6e*k&k zq<{xfgi348>fOd}DgIIesgw6H1w9sT?OjG%cL!1W?=jD6*U%wbAPU-3H<8|gCiZK1 z*Ah@fum`uBGCTw1D-gO^5lA!dO(Vf!XCJ%mCGK23W5L0L;Qmb{U@3FxTa46R(QY<| z62s2fTsnCp1`VKT(YGw+QtwmWZZxeI)5Z%)Mbk4qg~4-_p$tpZJV%rw2uWVm%Vq-W z$xcAAs1m!7%klCz{M-(;E9FjD^J#V)3od)L{*2rNgDAXtz@KneYtgQy-*}QlQjI^u zZr50}_Zr@tFT3@XlkT1dj}Nh{f(CCL9efW*EDC;_*R*@ylN!0(wGnL{Q(mmUj%HjX@4v|WaZJU-UD z=hPu$-_ZkM5PU6A9y%ZgBIw)k9Wq)vk=A4_eN%0n61_vfgtYai^4S+?$ypRNwg73> zT7g|aX7o@37S5*J<~W0Pfd@OKl#;t;s5WRMJI?(+~Fi^{Xv&v$+Ecn2+zBb{`b zqKuW+I(8lPv^2g0YPJJzw`1a41D_!n8(?TxeWz!Wqp>tpvg zFJl>MNzy}dSaqlQa>r-5;!TNRnf4YFYQPxQUgjMxa5~8IH~Pqxvdv<@wSol=oz@*O z#AcCd1AzlE8sM9%-0;({WQ$g@r$0_n#=?{5yExMPV)LS&U-;0%?T>@f&T@gTWT0)_ z4!%BR3g2i%*%wHFq7J9CUmg})!LDP#^+rlARauEfkg`Z)VQM?Yg~TQ*nHa@ZUKGR8 zejLSx20MfkP%8mMXQ6IF2kIh(HF~Yfd;5r*RpA0+m+?$jud=Y9iF)H^`ZA>DxMo|0 z+|#H*9Y%O&=7(Ix`~uz+%;VGRf->nU>YRwfq;zI1rBTL>LW~U@6|M5S;N4MS6U8{g z&}-g?O?a{t1i{PWWJjk!HE%vKB4nSZe zwe1Vh5hz>@Qsfkiffe3HK7j=&h^iO1`BT^(>)1yIk|na1_J`~I4t~UKq`RAf?Tuf& zdBc9v^nni?18U!ECAz=A*?#YPk3$+hU;~sy7ZGbifn*7mzashi2x6C04X4is)S%UHuW zZsk`zS4wV75wwV`S~A{KrAW=s?oAuN6e#W=dxN0v$Cj&Ho#oqq;uy?4MPFJ-StCxoLTCWX5AUjxBZ5C>G8yo6s!)#}9b@lMbvZ76yNhX- zgc-LZkH;cEi&G%_S@+Ln!tns2EcJ7}BL)l*7dRPZzom@8>V3HQJr^4mTvnh9F7}F^ zmspw<5Zo3Zd;;a`NE^tH5epqLz)d#PhCBsz;4@T26vW_-G%!$wLYjWmCIgsW;@hCh z_fbH^W?B3Vtpd`pga+`n6K8=)nO!~L0cBzKO<&U!!}j zww^8LQ7sm~Nv=wk?|0Qv(~Ypb>uL_+>z^f0_nkpI5Pw`M2!%uU9)~X*D~~rtRx{W^?wsY~rA48F7yQ_P0g24e}wj ztOe}+p|_R}kbn|>-Nz}}oYNkoYM&E1x)@Sz?xw=z2=OV@KXTaR5S}aGu4$XTiMCTSvX4-gbL|iCACR# zbURFXF^v5oGI${SEBn-X5z(tWnv<{wNKN4IB#O(oSSTZlsA32l$@sB|(nd;bc%-#t zUFnvIfIwN7^iW4j`(A6bqPDQ3n={5$B#!Vb3k=VVwnTnk zKyD@GL()li!dG)pJV^99TVP!W{4;ck*qMQ1Wi4j`67aJrNYdHD6HdHz(#bFF5@hc} z`p5wY({G8YXaZ1-^Qk}h(@VxF)2#VLQI8+Qx@@QpoX;q5CESH2hNafjj`9QDjiBk& zkA?-otpdWDthAOSD7A=*Bk(RJ_8^o;NZQy>F{KK^)(RjBg_ClmD4RkVUPbT5{lVCD zc8J;FxSma{q}T%dbSxUD+WF5|`X_>}xn-LHW|0Zy0%L(asu)t;U>hj8Ik0%05*wmd zz)vEZ$WmG>S4rdk!1~LtGJYvG$d|^Un($bQIn@I;P(5lRw##D3d<*KL<^9l;#XSY%rou>QMuPeMuFN<$>06LzPVBF57&dg&L zp<{$jB8Z`3K8*i^8G?d=;gY!H^jYr!PQ3h(!M>t}d1Rx|a9tyHyWh=~pZ5#J_n>aH zP5vU9e-T+4-Jm+7P|1dgl|W-GZ_w!XKg0*tx#C#Z&AuIhS?A!o@I{E7wfc`tMk`ayPIM?&EB5 zVc$%E#MW}szBBfMoNH_YT*-{E=IZ=I8?h;(v|idG2NIxoiiZo-ddIiim05jvFAYHa z6AVr??}S>;N<*`^H0hsIPD6LfKS777papj zJAl896Wg+E!-%p&@kCxoTJ`xzu`FB(57japc{Q&_0wK)_mU0IyE*Cf>IuK}CJcIU8 z948+cl2n?QKE3pO$%%~M?cR{kfwW=WCPL4*dHL4HKQ`>rV-x(*LNub{d`4yD1N^JJ zhsUFVM+{Y%U{gVqO~45$idp_lM)L9qlB;tJ4R6pfF(b3wJ48@VT{;P5w4x%<6TsEY zFc4UBmPX-7USZ^{ii`2Sfi~S-see2*$3SZV5UK1UAma*Z-A1{@Hur;aBDA;CS-nDWuvr6z*m;7`STMV~ zCZB5>ODky)NJD$A`*|i}ZaSU8{!7RcnD{3WT;nPa^?_1qj?Z~5UFx-Fc_FCi`jo7Vjj#4c2+XNWw=G)H>)Gx6cy=N?qJd?~A4m@~ zc0xCZvX68UkIKs%WoVql9f`9p@;9UygdaiL{E$DKfhA+E_tS?D<)zcal0EB?;SIzH zuC}D_RR~JILdGpZTRD?7i#1@yv^#q;V>X%Qvv?xGMaKwa8-{kePni?P%d0U4?604w zozvO++hJs(7;As&m*H*mFWQxVb3zD;O#Gd{qWvwSz41$bqwL8ztQ=Iw^|0`nx!C%Z zzcGF|Xj@TI{2P*bg|v&4+}3K}|II(8f6D=JV!iM!IT6oYnfAp0((T-rgDu0%^V2OyOTh_GcnjL4(?6~kVk4bF5ehYIS4GuaZKr*H7AX8fau zctYhGlN$c#H?yalp%s$2IYIjeFfVJr#p69 zpdM80cxpucv!w4S)xUm0KD-<<%AuIpv7Nw9Q(SB@aBy&+$WjCzMec=sB1o&*xPh%C ziq2QU=bB!STb96m!6m_`XO;c7hm@Pk(Z+FmIH^^AITCzQA*rG72yLRd;KZZr2LG8J zcMB)i z^C%w|G{@1)@hpFdAw}5S{!1$GSWZ)qgO4lsvEX3RUCWGX<3O!e_<*i=)$gMZk%H*D zRHI`nOxNQTfyB3Sq+CbkLmcEalq#>y&ibeL+t-KF#`fImS93!9Mx@XC)V$W%FEuOq zMa8^tjAO+q#b5$|_juUwOCpIztoa$~TC?hVOmcpua>cI~rZlpEnV9;fymVvgQ@~BUjH)RjtloF!fAM= znfI|nN{N^_k`;dex1Q(a!l6W=rC|b9_JIuA9wN3Q^s*!`z_0RTawN_$@+>mN%-;J>qoVQm|qz5`7;Ll z+Cgp;M8pO9^zVRdEfM+8@&W7 z@>LxFP?K(JU%<)uHGHNXHZ3l1xv^hf;2(eu{fW{&d(rWy_#Un9m<|+n%II>%wIwix z9n+4%1}!Fz#bVn4redq*KLn_LO#7drO0r*9>0+|tr9-0f^rQo{*$>Fb!GHOAq9_O& z5(xwDYg%VJ<-vIdmqE)Rz-6VNk;nCZlni(dzLg92_kkvq)4~f`8?r{$gs$ZSb7^29p=bxV0C=qVfCzpf&&c7`d9wsPmH3iL9~qSf{59f~O5Gi(Xmdlv}rU zm17Rxf|l=O<>kBnbuJ#c3zG}B@n{2;{yJB>bOwS*a9iM5QOIGbc|NbklQ(Y(ZgwYE zvb4e__Pnn+Ou!`adHUz(ZiYlc;jNi;h6v*C*4Eu6i=}-Bvh>jj^H$5cnEXxJL460c zzx0^zXQ~Pdef=I5H52^YU%Fv`}Yb%j}k|X>I>oaq7=a`Nt8w;{SCF zCOnV7DTtC#21=*|oJbV66s6+T6_L%8`7s`+*Yck)Gi2_)oDeX>&hCrahfJeg|)6Z(6=tnF0Iu&hUnU7&r`q1|DBvbim(Vh{LV^Q619% zvoR^h$FSiH2^o3FTBUtBl_qa1a_2wQtWs0I+(-3wz9&L&b)Np_C8KF%Rv&&mEwNd@;lkiHI93VaM9lXyhdZ5==V&f6hLvZp0u&c{TB@mD1KcXNAgw!1UwPchm$r2RUZmrc_M@=@DxW?h?J zUl$kfdB*1|O?M~p^!*@1PAHH|^p3J2oG7+)XsKRdDD#DA(ittbF@yAcwOBMji;5YKE@>rS7)RGYW z@Z2F@kcuW)b~ab;oN5?i3DeNo5|FFo7*$pucXp=lZ@JZc&f1K!ZjQp=w;D=F-~bor zIbPe>TH%>!?J(8qxod>7S!7fC13{=cg#CGGut=dyIJ{2Tn^5+DW~{H7t#$gRE>0?r zb8np(dv%x&{Y3Iga(jewo6LVw77A{d1H?zJ|JJ`O1*CU$#_9jA?E!WZWuC|ylxzxZ zmv`)ZW|7=83i4_>1{5d4asn)s5~wSt2ox>}nt)b_L@001$#vm2N^dwY6Zt>L{pC%_}q|lBf&dS4t5xa(ni!jLQ*s(UyFk722+*6h8 z$qa4XAXM-A)_H$}`?qXci78cDB$IT@LIA5RGG*@z)VZErEf3AgX;^qZu>7yG{S=4U z3@de+9Cc9mxzu*LeRh6s|3bwYe5N!afbT(8>iuqKX2gk z3T4B3B2*Vsmb;l8CMSuz=|Y)ndQrl-RlikP&tP&`{VQXlMwpBdg=M>G8?yK3N=YCfUqLyoy!8QLv6!k*<%g6n0Vn_PtLIIb=s~DDo>(76>Yw~|7 zq;ZO)`5*j+dv&{8B1fXD%1eKCxxhdL=5wnvpWgr)nbp-`pqNK945FKEy)>I`P+saY z!|Avd)dB-szQ&LPv=Q1GYF<)BPksD4i!(;Ah|yb|>-}0w*^#!-v~-U=MDAe~m`p`Q zYY*L-LB}wm2vIM@pL`26Kl;bsJ+2+J72UYxNN8p4c?O=~UR@+;O}FZ@i@?P+PDVK~ z4^s?W3M-;y_nki}#_%8<6FJThD`iBRryS*f&B>U8aRL+~6pWco5DDoSOFkV-=39 z3h(LLUFT@a5p2bT4N3ypHpw88HwGOF9QL&3nkIxo&p?AWGb$?ufkF)LUqZqIJG(jrINR1c?Lv8r=hZsLGS^atf4bS=Q z0v!+OerxDohngbyG5W|Y&UJ})?}q7h7MzZ*r2d4CUW3VaQ-`OiWGiIbr!z+yhK^l} z#A)c#$xTc=KnX$T5lG`2pY!6#pr1rUOt~gB#vMnEEPRzt6XVRM1Q{OCJfuhM#2Y`{ zpiU5J#?C{9A1(yCj^uSt5CR?`7Mpwcf}THf=rEJx)w8%_xI=+1 zcpa=dd8sRM)M_yGIL6b;2+C)^59y>*vR|yv39i&0UCG+JhciqKP*PdF8Ci9n*}y$3 z*)!YOgP1tS#~9ZBbe!(4s&nUBh)zg`*i_ET-D;|@50$`SGd0#g8P#puuA}A=ap#m3 zy1m9%*}U5~<~xn81-n%PD!%mM5er%~LAp524QlT{xSSj_5t&2LYEb$DE*jw89%NCN zub@^!7y$-f@FUcl?vb*1M{^rhfN)h zBVmQh!+?uxRQ#Bnz1)ducAd%vV*~Bn4b|d^t$MKYD;jS2sd~72Rk$H8yJmDjO{H~vPz#QP+{BzkGf*u?oc`77 z&Y!9HfU7m975e68O5wha{az@!7LQ6}sm@%O(U8#yg-75>nPSV$etAvj&hFNs~01c0$MjP+tNhgV_uw z$C*wOEdQga29ioCFh>AUP*gi3;$pptM97p0CYOpBVoW0YyZJOmL=?2%GtFT=0Jo~j~<;OKpZ3`3Xeiw$P|m? z6o+z4)9THMO4@Xmte=GP5`K+U=tz$RQmb5Q@=K_WC>?myx+D{>?0Kl+jR-_D@}-NU zhw(MHuy$wxp$uUyqezbw6N(8C;%^Bms9n_CV2rE!c2iD)DKWj^3u$;bPp@U-yYlO@ zl4#w(G_yAl^vvn|zm>9l^|yw@r! zHu@urX9HX4ryhnuAFBCDyx)mgZ#Pi7C%-QaX?4*H8;iM<+O1otSt)5|l9R65_jcL@ zSIQwlzv9On-jxlkVky>DZlEnI^?kbcFD3J1O7z^)1vjX;MQ_4QNi^|a3-C-5+=^`K zD^y6k5<8{7*9gH{D={Iq9rx<{-;7%Q+^p z+9D75fRPakPMvFQaUq8lBS_=|-zZzkE)iI;K&o=1WuXX*MO*~LR`uS5f_R{auv$h| z;5g-Y{eroQO&p&jgbs@tIHi6%quwMV|6gIJn0`x2>q^XxijXu&{fDL4KZG%Q0xO;S z!R-c9v_OC-&CPJSJ~vT{Q@?5=kFxZ8AOz2U^~~-#>%xt8oN~OR38mufFXF86wn}}A z1*gn4H{GD1;|oa$?nMqoT;QGCa>9YHA0<6`Yjac>r@?tV7Sw$bk}q(yE@;gUh}~4{_8IL+iw@qa>uOFdbRsS z{?KxzDc$6uYzrPa6;b`)-;H%`ot0F!^o5oF#fY;f-ir33UV1D?<9sFUtBq5u6KbKQF2D9H;MF+oMlU+u89JvG`Ue)EPcqr&Wg~6*T(oL^)*~WjZj=9=1rW*NPnf2R@?)wFH69Z(pLM3nq6wis53f+eB)oD>g`R|Wa z1xVoQWrT79a_l4mn#XSkumg&BLrH7`$%nIGD@|4IM<}OH-)(4Mn@Jet7O&ZtoEfg5 zcYVN6zi>e$6GukR&gIzJ5!@<_OI(qxYY*r&L}*t8=-QJLSHuaeIOVvfb&iT_qPukM z1gP#C2oi~KWZ~JlJfuHyIYYwr%c_5052CmVj+S5`k%_zu#aw#SfUmhhw|prmz7RCC zSgK{f$;T^G71o4$*O^Y1DGT{$`KdU0u&^4X;9@aMD0>FEeGHL{5^&_}xia@48LvF{ zPH=+3X(`CXDaWfCP%7>hB8K3kAXO-QqqNAXB01TnNOihv`-7+Wq3mi9vvgX9;z({S z|B#?MYH2btzOUmyPfFJ;%upnR8@}oID5^t)lU-jF>mN0L3oDK1H~|@AeHmY(@E2zX zQOrmr38o(;P~Le*yO+m+u)&uH4~MqqrD+zXqmWdJ0L~Q{xpYZB!)Kxa1Bdl_26u@5 z*SF|qs|bEt^$vXpU!(YHJs4UCs)?;>-1>gfVZEHgfFQu&a1&f4z$-Ha?31?m4Z6t%`diujC}ej*2&{< zK{CIUiwB;p+4ZvZWhJC}iO<-c4EV<=S!g|{iqwawx+{TONiRQKieGwa4V-!uMn1_u zc3t^ml~AELE7NUJa8oRG5}8kav44I=t{|t#IXWcYsTq|0ObiL$%7Wsx9x`DPiV2Vr zNa~3|fpuwF4k1*YuME##oGBDP7y4vPI)Mdy5r=CI0XQTK3{Xi!Saei4mcerh zgY#bbAy{%}Nyxa+KRPD#>xzsgPNv_s1M8koeiNA^rokzn3Eou}u3V@M6`R zx7mKZ0mx6VC`agXd7o?FWlFvx4kw_D$n|U=n3=?QL%1EU^5+~w9wtSJE5D!x5#g6| z1^TS5tZ`Z57g0oxbXz2Q7BwQlbBpSaQ}Ae+x^zpos#K5n61l!V!#?98Ps@)_cTgY) zWF!Y%Bh_BK6v4oQa7G@3|4zX7DMgfwX@uK=VFa82g$e;dhv$5MFtRJM3knOvUu_^O zqX%OKAsgj_ufK%Ci)m}?Xz%Fg?1ofiL7nRxZAV9#ZhL2^?BqoOpCIIQd{gM;2?-2e zJSh`tW!Jd2))gEAGAq|+K@j}=9*IF}$#0Cz4bMK5-&1MzOe`vQ}Om%F@Xky2B*Cf}EL_ zq5c^Jk}Au`vYN@g^pA*%2V3t*WHZVbRh^6)cUw&0^iNWk^JxV?gq#fx+YlJ`tWRSn zc-F|{#~SME)xAYWm&Y*?A4nw9MVuK{yU?GR_ z*>^QAl6dOMdeO4gA*Jd}_kqti!iY?w`sjrnqBmy%J_X$tFv3Kp|$rI zG>yF5*&0R8$_16_R7(asb3X|WKsQ3I`#v|Wt~%;=EzV2OwY0qTCPhi=+OTLre0j>U zmls+SySq(^jq@zD)NDo*M6;?E=7}6TO~u%=^jfssMo9W~8ExZ&mifB#J#zx6);V^j8k^uWM)VD`V4cWVr3TkN;pmme8# ziZeqXJ}^Dd9xyeENDT4z}! zpc80?=nvK*V@%j8965hl>*J%lq-@)ywx8a)OWvh|J2orrqet^{Hf;<^@4nl3rWJhI z3MdOXVHpRC+H`yRnETg=+P7#19mT>d1(lwcdz2~e*!EHJFXjB4$$s-Xzp>@gDWzg+ z14mlx%v}R_Kfo0i75M$Q()`i3isNLw1pd5Sm3a$@1+Eq8fuEPcB{&^ju`^PL|62O{ z=~uaqtLay+h2u!fHOe)pA42wvA*9+O#eO{cYBZKc@T@g{{5CE(%JE0cGxOvdG@L-A z1Rqo$8$G^fT6r*-LL=Y;KMhr)gz>~Y@H775Qu5S5{$ojKM0=(Z0#Gg$(YAWV1|VmJ zK7G?+2<3`qWX;f)ZXoLqaBk?(Kd z7n{`3tfEXqMpv7-S`9ZJ)bv*PACj92TnU^55&Nk^Cr>|YYA0rrw@$3WS+4487QSj? zE18&SY9H3~oI>jUhyzHK?v*2$RZdOUR?^awGukuKlULHNH5I$)<|K*k{|PgC-sDC{ zK|Al!kfnI;73fchc5f#{8~8d|qu=^bZ;+t6(dor3bVk0U>V1lZgf+}_kzyir=~Bz@ zvke@=#LuAxkOM;~miMccXeUtC;_1;k2qBL4B#(Dbk)W8ERX9=r1Nnzs0!{$ZO~pLd zMGy#)2kpkvH%&F!tqtbIZy0#){7#>i(j;09ktK+r8DcWqLJfmtC=gt9@rpM|0Rbm) zS`emxKEoW8B>U~QC`iOc8i?>(q^&)>o;ZZ-7Wh40OdHYWR z{Gboz#*l88tLNm34<3*yQ(JrGNJLj}{}~V3sgf%BqBf2Zxw+=2LqER3U|tBdtqP%o z9Rl@NG)11fZ%D6Reaj?VKYlB}itRK0ISF{-wZc@n6!s5)Cg93bg==9iAbmdW>yO5w z{=VZMBM=QUAX0^w(#ASJVWYCyRNDmWJf+RcfSCT|EI}Wnj-)>D)%jAcf72dh zSem1S5xPz$g<3@B$aHiB*5)j|AoSC=0AvyL-CSP0OFro<{4R<>e&AxFEOz3Yh6BOA z9~I)&iqTEx8FFKgy4km=J^YMilqM!!Lsd9_j_z zzNQA82(`XLW3)oYS)^Vx+NFo>1Qr^Ba15tSm*uMTEp$$m+oj=?d_BW4V_0zo%{yGP} zLn3}bu#+>x-}T>%^_l=HbU#+opEn>5=a`_lD`(dJb%EI>n!#$UpCWs(qlCd zzR2fdxe7+O5y=`jmZ%XylM`=U1bljyg%ErASY>80xPB#x`*}DzxqdyPAslt*)I;RO>Qex!pYl zf}1Sn%>qGp508q4PPcJQ(wA*|HOa))xWMcIqn zoG2mM!e=j~v%FP`6#I5iR(=u{bb+$+?Wy)kg%{}mMoV_?1Yv|&1K+KM=rf!Exyyj& zbS`%D_+$tnqFkfQz;W|B7o$0b8h)?V53ks@0~7#eMzfVF6{!}>OZn{r`9fs{D{N1( zS0OKJNC%zZL>IS-vQ->fV-hc`w&tNT}VQ8+#HRL*@umk-R^96%kE&F<|TMENOf=->Uu=Tlx3^myaXULTA z@1ui1h(nv|!6}ZQ;-Y74*_4*Tgc!t>Z|EO#)cfC4$Om&0YEp`=-#;|W=iDCaSzYI2 zUciAN(&#=+&;^X=|N1&V9T(+X&Q6R$wn@kSf7f7vN?kmF`bj`F2wGk+#)>}71JcP)dk$*3Z24`o%=C4ET6?MW-$xsq(W1BMM zLtGt^MB=^6`R+L=0J#Fgx6ieEF%pTW;||GlU{q=AVv#!B_CsvHZGQO>sOJlSey*)J zz$+()hW@mqgDbGbLCEOi4cqJ>O()=^#Z92;eod?WZ2m7V{RfgBf7|hJH_unr0L5T%GW$%u49DM}I{DkcwwUN`}u!C(I z9`6x~JX&r?mZD2fj5G;NL4@M=T17(x7vI>$Bnb)~qx3zC3hCzzC$y;vd@{F&m3{JH#LGLaC8??aRcN!gOfl+b2`&;pUGn=(SRQ|S##D~w!s-HtBdBcsxshhmK#Vw zKghJf)Hya;O19e}JijQ4$X)qlQk(_NGPy$gUh<15<13%PQo_{O#AsBm)l@sS2xG95}J5P6tOHpqDe zFPbiGS4^Kgm}8nWs!y5qF*##rK*7IS0@1@Q0_8{FwrX{`0xqwBZm802x(rrvz^co) zv~S7j1w5`GSEoI1t31_+HddZGZ@Z6lPj;`w$NOzd`LR;>ag!t}=Co{fn$bEpe#)ApCZ zf)8U(H-Zz?^&#QbRDJ5mSrX;!_d>ZuD*RVKP2!q8`56d1xV4Vev21~kV+wr9S?nt5 zqd9pCCyh4weo;e#Av?)bVJXr7(EX&h#^hi4J2YU*1AYHvE}jcGi%CK(k2?Xj&fk_G zqGRpp6H)341L-;j`0<O3TvI`)u)^y0@HM&f zeU?+IfVAD)2zk&`wr?y1azGX62*y;OBL5% zWb|?jrG+M%hFrb~(bI%RXHsfnfn-1+9BW|u%zy`{ydekb7yVqHU*i?3CHDX9v7BIZ;C(bC z8d$PNcIqAf%6{kQFoQ+KAX*@$Ea}O(=f~ zl(SiYi9lW!lRLsbUpFF&QYYmKX`9W+f3c08^U<|I&VRW*Kpzc}AQtc$p+V8L>$sMc zQJZPP+$43K`QGE#GXmN;L0hg!G+;0Vg2d(BVJ2T2+WV?o=z<^|G?Up`SGEKV@y=f$ zm1pUjee_Fg5uJ6U3+H)YZAqF1%+ESp_}$9|g6#5Igc+3I@nnl)9=FykazrLqi1&jN z3;jvZ04v(x*4|Dj!QP7c{3QRDHD{hC4(aNP;LGZzl12GxF^wDNd+c!dL|b^m8Ib3t zUd2kQR#+%6sFCT|H*?pYha24G zgewHKM8C-Qmymh{5lVxv#l;(B^%X3%`8Ee;cvfX!09QEQwAF zURJ88Q7yP4b_~L^RjfWbdKqZH;&piKmS_*K&I-o=%P8Sty{-*(zMfIBb|cwJk}DyELv5ux*bYIhfl%b)1c2WBPpP? z-nmAeAjUA5QsfIsXh&1Eth&KHzC&|J>q#)6ldz^x@yYg3&ELTY^ zjDCExrG6i!flqyB6A9t@t44LvN&dDH6e|YHMJzUxF%s?A36|J+bt67UV1s9WUL}`@ z4iUtpx~5#4b9J-1=WvM*SLJAAL?)NPBcEhW^0$h&i?^BU$VH&d?8JSC47o*6-ofNB z89n9;gdhe|swXKJ17afM#(c*?GN6Mlw#Mp$d=7$t9ZWfcR>H5(H)kX*l>}Uy`y@?y zxP(SW8NPao?P7I@MCfjSDtn5f=&4)-UGX`V@#=#{J*be1ASS?#4_>{2#6evPX~H;? z$_sFtn35oTUGK|4=}l_97<2o5c!5w0RQx@1)>IqgE04zezVb9a$G{2DYQiksrYgSS zVz{(~>l*1UWb~f^#|?C9KKYMwI78KPyVQJV@x(FkWfNoPDxU?8kdXQo^W3h?c238c zL#B?M0Ifz|L+wRKc#fLXaI0wOJJ0AR1!4Il1oI7O)o2rZ(UBG6y+d#uO-oJPfKz!>>5+d*q z+!Gy}B5{?X`~p4D2lkh71h$JJBgmJ?S~0P>B>&$cUj>F(w7D-(p9%`X@)1&{Tt%r1 z4Wt7F{3ithzD<*#FJBx2gQCkQHU;)^S|yBYkbJ)`KsgPe^twTi~saQN^T`-Oj9gUN_O$fZSJDikBD)t(LWGBd=Pa|5rB{ zsGbdwTNTE#a)S3AO!v0+YuAXovmzQ6WhYK`A`~53sZ%$W7vN~v`qL**o@VKjKKiH$ z#oCE{MY69SSJ?L5w6--x-trwga%6mR_VDEB;aA3|W?#0z(f>qgA5^F4BZ3#K1m)P& z>Ye`VHjO<8_s}#lPpJLvw@sTODX>hmh!!@DKU*BM=IQvZGpRlU9xQY!8tuNlpq@|v zqD|YD>5pK8To}xrtm3V7bvN}|A)nG~9Cm1d*4dHCdq(mfLaOT<`@mubreTF~(RC$|ufBmU#JLswYptjmGG-NcaU^53Cf6ISSm<8m(FTs-tg6agR zSWrwFUhfIF9+gvxVJ6K7^{@2T=6~@YPj(s!@}7AtU_$&Bb{dw}yiVx&H~;zw5~7=IART!*Y94n{B@_N5{f5^_oM*@Oa)crYYq_Q~<^^7m{Q0t~T)ygU_61AzEjJF{|6YA&?2`h9=85_@04-EL zX&}vqhco-$Rd5BAH#6C6#@n&B*Y_>GoBYRNzk%kv-VHVamCa_dzv|fXwO_5#RNKmY zwKO*ED_|@MM3^$4FUIz0HFg=e#%3rOq`=~Br%x+gdd6k-@}aGu7!>j;D(G_ZN7k5L zl-U!#b1i{S#EO4%dCMnVE)cVJAL*FzIH)-Wz+w>DRO%2`qb3i*0#bX&-k|9kS%x08DX~6DVmE9UC^3d&sCz8x*V+qGV4w zY+&o;KmFu}#r;K0N%xTmE<#C5uw2MZMRq-wSSrr3_=o%q=7P0#&XFivuG`vsxgYdS z=*_;`3bxMFu<5t=>QQ;&oncT|$VnTrEj0F!X0cXRNWN1hs+_AGi?Cdw<5* z>(>uARwbaAD#wAjR*e16*SKDj-VQaaTj}LqR^|(7!hGdr?)h!Kw@)lmwgv3O6mS55 z7N470yEWRqe_hX6D|F<=f*lh}&F(!bfuS=ep_1)OGcT;jaV;#TS%`v4X9Bbak}Fo# z6XYawwb!MunKE)}6pILCYJKu4cD-_1>Ha*g-fBs!Tks1nehMtR_)Sev>PK83`B>0$s7aiH2h( zSYJOXh`z9J9=qa5+REFXYf#t3Nso!6nZ>X#$(u{lF7$T zu22nAtKbNo88zbDT`DxPX}T~n1%0HM54$~cK>7FdR66zTkKnhj(3l(sZz!npQN>eE z#gjViq8-o>nEyMMr=JWc@K4)HU`8^q*0&0;GsJlYzXsnLKpAo-^;Ne6#@2^B^h%e#-YioWW+L!A}MLi0?j*&x+=IgBP!_M@o6G zc{w~sao4UgEpT#(emP#(RfCP1>A6j&Q=@0?N%SWq06|BkES2krWLp!{N4vuK=6WMn>v_b&-+sy?lX}%d3U5Y9U@GwL#E&g4vuPk9OVqtTB{KM)%5Jsa}-e z-!mbMy(dobn*@s7-#_7A^B#dAX}v^N-|R=|f~eTw&m1n55>A-rF6`^TOCK~=iufG@ zE_+dBS`rz;k{hsi?m7czP zt=SU^o;qDtnxAc!61be6R+Qr~Bxpkf#8i*^@*-#ZKQQM%TMRepDZ(8|L4!j{SwP8D zm{7sjJS2dXIjHDb8VMV+ln<}^wf6l<9)$z&%=d%MvMrG^wjE4UIrX(BwsoZH@R84s z{)}L%VWn2T73uBwuNRS>jk#L|<6$eWK>TJ)qrD;>I9xOi1p$jy(!`#GHO34UMJ`m| z)z@vx8_2cJJDy3kwJLv~`)$cMU!@czxuv9zq#H<|Ktwz4vz-mV%&WdXF~Z=i!PbcDZubfbt%sO2qsPNjF{ z4YHhuQl-(`>Mh|CIbxwt_hA+;P^zYI1t$`qSu3lOdhpDsvo=|-QtMfkr3}?`wSq(^ zQ0yk!)e!$`=~jplwxSHZM$9gh8kX2=?aC~0NGfwll(X_M_vK`Qr3>| zzl~e><7EUfmgfMxPxg)Vr+M9H)yxJdRR~ff2}uQsASmcQ7x`Bid5cQK*wb-gQcd?= znBKE*5v%o zD?f~DrPw-J0*iM`D}!|C64D+*;Hljd3hUQ zaKv&RS;l~A`i9t8>9N=ppRt6f%w0<6qm;+o0tDtYDuoRS&6v31+_AI+qFnQD*Ed5CNmeT(#nFi z45_AjQEIFWIi&ErtKM@@(+Ao!jnoqcfC%faNdg8apQZW<1aLsTnqC4rARjMvAck)p ziX*($fyMZ@L$xHIwVJ4dWlfa+u5Cj;={v~f$pv&OO#}(zaqoN`&1w^bFG$M|%9zPQ zHF6r{Itnt08$CtF!9MK;&1j2OG~y{eZ?Hiad`x2BmPx<0fo{LK@v&HtBpulGPFZoU?j^1VKK6%-_TYzo2OP}bbW?4 zo=V7r{s>gTHW!g934XFR2&(xO8K%mbEf`dewj^3)941dwtEX>ZXk=_+YG!U>X=QC= zYiAD!8@9oWA>%$X>L+7X+vALBcO7*s#64e{iei|hyHPdimhHIQ9I1b@lW+Aji1H0q|XUe@XGTjY07ZJAE<-UzJ8F=X&XQS5|G+`#4;%dX-6(Gtz2ymD)RcE@wNSU=z)eoQ0Q@|99u=Wv#pOV}R)pnCF+jKJWW8`ay%5>c!WUUitQC!{QFWcE1PbhpE;- PaXk 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-BoldItalic.woff b/katex/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..67807b0bd4f867853271f5917fb3adf377f93f53 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.ttf b/katex/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0e9b0f354ad460202bba554359f5adcc8da666b7 GIT binary patch literal 33580 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff b/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..6f43b594b6c1d863a0e3f93b001f8dd503316464 GIT binary patch literal 19676 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff2 b/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406 GIT binary patch literal 16988 zcmV(>K-j-`Pew8T0RR91076^<4gdfE0E4su073x(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.ttf b/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dd45e1ed2e18b32c516d9b481ebed3cb8bffa711 GIT binary patch literal 53580 zcmd442bd&Rc`n@NRIci-?&_|t>YUT0p3ptrljF|J##wFDMrl{lYJ<`$AR#0nAqkX0 zB*_AcWPEL|Ot6Fyw%{5tV8CQ!urb%h27>@|eYu1m8*T6Zo>M&=KoUHD{`)-t&g@Kg zRdv<(edo*JjF0$yKGS!HPw*Yux?^x;=`S{p`+QG+5JwMPdez~Rm4EvFoX_`^?ehsc zFTL@G9K9;u_W3?l!})!epFDciCG}Ic`g|WchMV}09=`r0j)#1{udKsw_2`v1U;ang zqqx`bO~kGc*cp6`!wRHLPmGDvmsI z*~kcup8C-U`BPl8>Lb3tqM!E#eQBTiv=h=P9qEfSTa6JXYEwln7OE8*aqz}_J=$!o z7UQvUjZiC0No_WsO9mo67A?{@M+#7xRgd8%o*f;Adap z7`erk{R?~jMllgDR&oQ=t)6u71r7nWvC}hx2H1A^4g$7)yG9gFg?0n5F_>%`Rl2Vk zS@6aqNKsMjF33eiW)uPv;nDW_Z*UBE0+PjwgdglPjrN%N)7~CY^oQv-@=?5!bvbYW zc`~TW7hP;eZ@5m@gX{wD@HrQlp^w#qxue_+?)KiMBp9)GK>h2_pSM9N-iiqZLd zfhqyNBy8S71ljPe(3JowQ+`SJr4k5AxI&T%er^Wa``V{JLq0-j#9Xz|4Rs5=j&G^x88+PKDM3+Xqqt5z`Sj zn{mbT9x>RH=o#8Lp45f9d{HGU5Gmc8nWti;Sa0+SGNqH6K>DW}&pJ7wIwBGhC6p3- zXK&xk0oPFLbrP8D8@Hs0lXaaeq3aCtpMnui9U5IZ5!DCl;feZOSc

viU|OFj=e4 z`Uxek5bnO)*l=hG;s=iTjG%%}ZQlmpKHt^8z?^>c!0y$B@v7KFUtox@44PgPo6#*c!mgM)V7_u8yDJFU<+E>Q< z=VsLG1*xEJrDJ6OkpnxLJ%YBWktwz|1P8s9o5mnqXSf9d&j~U83151~XwRJqpdeN^bFejq6nT zsi2R%ls>)jjD{=~pf!U@XwCCAWM*)-2@UDPeJ?sKlP%!xm`{GnB)G3+LwQvz7E{(O z$UL(SiX3tsvLzf)q907xk1Jsz;FpcJzSa1NCWqfm#$Ivc@k4S@kOk3r_o;{9ZQ#Cb z+_!@JCUM^&yKkgD(r94mEZhw%p)duCCxn=$m=Yz)f9BqPze4o4zEvmm#{{?UeCC!* z-^Ok)s>J_Jdc!;YL}ifAkvZ}do-l(aG@~9x7$da-J^RfVrP=~tIj%B8*?S-Y-s1Q$ zF?3z7#j0(_SeFH(M&yQ93%X+(;C9#X!*uj}_tp*XjG~Z;8H{+RWb&9B zG&QX~E2tsIkY&1qJYs|`|0AKgOJvz_Lh3?~tC^7yKeuUfeK^!w;n>54B3 z94r|)w3_YwC>I7R@7PM-k_%NUKW36XqH6(#^ag{SuPX_q^S3`vD33f6z&kajcD`GdK<3QzYtp9#SknMHu(BNAppG=ud6fz@7^4@}t7Bacb} z)lWKqD9Jj0AE4jWiC>YPU($6$)rF73o>x!*kbIuL#b^75Vb4oWfG~Rwq?zJe!<#GT zas_zHip>;+r$gG{Z)k}Mw8NpX!yDSkNVzZ7>g~IJv@cFbdS}K7Q9{L#lkDwDIw28n zLUhBnkwou~*S~f9L?U{8`&$p*Je$k83)|!c=TK#N+R0>`>E+5HXF=Y!z$mu^Kb`=5 zdEgjhw8=Bg4zd@rG}_nACE+Kj)eo%R!DFp zpMWyKYEelDle$pU1A^T7+s@a5b@nWHf#lVU=~S{;o`6ryE>J-YV+=E1GJdhRhpaJ{J1X4qFzgN9-?H&RoTU*nTZk=1u34* zllPVq>yIAX6b?=_dN*XJ$B0C1V_XoP5hAug58hnezj(=B!n-ciI2Pd1mW5uz-=vc9obPEz47|pMukip|iPq>SlX%E{!?j@NxToYcqE$<9$rsJ*Uv6sI zK3x?_=hUN*Q5p%$2M!QP9Zo;_4_AR1hzJAS9I1c*IYQ-5v)<@2C56=ghOBm&r20lc zZN?Kzp!QS&)Nb>@5qSH$v# zs3HVsdRMZMWTLWK6BWaP=LL@}Jil&bUX|2sw`Sw|_*BGM+;#iG+5U)G&3!!|cXLv% zcdESqXeqx=5oGa+%ywgp%88U14jh*0pVTGm#;yDBF8ZT`(+DRh=atTGOmpJ{|16=ic1jS((~)(xL)1dLNg^ zxA-c)acFY=nT=DUeMyD;Wgs1>#VjZ&$@BvgLH3$c*#i+F9av(GzOKu3Dq&t1ely9$ zYEKl)T8fvX$q5pZTb*C- z9`9MStfIQf%xkKD)>g^Z-12x|dZ4{BCWjq$VF=6*Cu3^ww(Iwm8m_vzC7Mt5O{t{h z=KA7Nxk7?+U+0^XTMEfUx-YK|Yf(sP&t&2ZSH0CYq zdGIOhjYB`AnVoOG?qNlx)25;+WP9hI-c4glL=N7+Zb{M&iG+i)DwFDctEXk)Hs*UZ z{VKV}r{mtBUqJOTB<(!oekosx!a2(bc%83|ne?`x+4)506QK~jl_-J`Jaw1J0(2!{ zs6=`yC=p3eM7%#2X6Ba#m|qrVG!k7GKAtQ|MJ{M%c&?@DPEA%w<>A*U3hn%3=i72v z5J~QrC-3ci8_aG7805A@@4J_VC0V-n#?kqECARi$A0h9cABTRK1MK6CxCVX>v(*Ou zM_^pQyWW~WdOfxtWun@K{bYewp)1)Drsuooo2|R+*{SLP9wolI7HnUH2aAG%bs$08 zNr&~mp|NsA5PN3MriN(RU0+N{WNSJz+q-xmR!R9Ok!b(aTu*NtCZ`WXy8P49dT-w{CNPm4*bB2mb34(vAc27P%xv^ZoP>$?r3$Zv0gC#W_ z)GNiIeN)p@Q(G<$xVP=L^V1IxE0emcY`poETh?v9+)tjoU9~o|SG4ojMi7~cR z_?vlI&Xa>fE9*)l1UE~i{q9v;R+}3vvI9 zoGa*(mh3N7-f&pYzu~X^1g{P`?|>V4VsXbvQ!vN$&+B900hWCG0wU~&ZweHgXq!y_ z8w^j+#|(#oJ&VD@jBxNVirsS~AYK)jEYCtVq7kODS?=m|`0!r85?pVSV@HV)(rl4@ zEQTnrnbCqLUlr5?%dyxGY+I14j`VwJ#~x`Mxtw{ZRb&T9gQ!F%r#`&`-x1ELP!H4f zE0dG5BnGTH*?-~OB)cgvw>D&!u4-o(3g)O zS_oXS6!`kr^F0xr+&bDz;t;_E4G6-How}gN)se*1;E~IaQ<5(l?hW@f=+!X0bwV{8 zEY~}?M7l!{FP6Y;xR~^pfEFS_PMu>m}L=_g5GjG?S!F3P{`X*Vra#y-k zPMmx!Oo;WCleq}>3o(5|E09TwL7#Z zw`zsF{)+dwGRQLOua@zt&U1)jx4%51EN}gzo0lio9bbt@6vTuSHpWLkiB(JZM!{`; z87K#MHGqw+7-){~^VjL@B3Vc$FsbE`1DQMd!aPxPE_t;HdcF3_z-K?pS45+3K9hIY zdJw9s7tU`gt@e-gcNc+3(f@X}UAM1!C+r9#J)Pxr?>yJ}9+JG&PR~Di$p=o-0?ap&{Z;vXG*WAN6hbRN}@>Cq@KB4m~?)vL%m|X(Q7Jym%H!!P9 z;1#CnIASw`hZZEXh@>rBgtJ=U3@QUaMU?$PH}51a9_o{!@0-1qyuq+B@|E5uQ9~)C zob)Fiygg$48W!0?J)R6nk|c=qRkst-E*GMm=c0u&bjKZc02!_duvnfH{E+?=q+l;# z?@ci&U|fN3=&2|N+Y3P;$^Qk}@ED9OF7k-va)gwEmjG6i$^a<0^joIQX%EHNznU#e|1Z5K_6)vMBouSW#ixX9l%3vIN=DiX< z^CqHqzC+G??}?VjU9Wh>&lq!hZ%%#b>}wLd=iamLAYD-`<__S|13YXm%aLR1nY+;z z%kg=s+#ExTGh*#k|lpInjSLTf$Zjz2ACVmXme(-yRe z9+DlI+FXc_*82+yRY7h6sT;72Njr`@yPaw?{gR$7t;z7W0sCPF`)}|8qZkWy@zq2{ zrkfN$BPNgx**;^^QL(`#oH>|ThvXo=scqK!}k-R3_@yb!tjc z9Y2xHP5si7{~+sTxHqcOVAd{auZW_kA{eU|N@gNZ7u3l$zJe;_rV&_L^!MNT+SiGK z>L3%rQ5H+mpU}=TT2O^202&DOge-?%ewS#*{R0u!tV_ z$coT4AZ%5es3t*M$mi>0BYel3!v190NQIa&7UboX#N?PE2)0dQ^whs|t+fU)bL?O= zo)egTwpKStaT^)7&S^nnRs}G@ga|hQCT2an%$g^Z@Iu2;tP8%G!h*p5hICHR(JEDt z#ucKnZAT;L`d#o-?q;HS;YLmj&Mt0?agvYk4-^qd$mm!S#YG?yDkU2~|YS0wwA*$u9}?iCw!Qi`I z(yXiYIhlnZJ>65Ol}DF!>FDsRBd=>NNKvxu(XWZtJFkuR-gBZ9n$gI5tGNA!FiC{N zi7Pgx#{Xt}4>9NV{Ly&ou{AH~BsinOeePyY>Krc!Fae}9-s*42AgO@HXZ=>DqY#R5 zXXx3FDO+v|Q0hN4>m0f0JTW7C678vkKOQEgAgpYW7u$iZKP2y4RGp|gz9S%!m)~?& zsA$$Pm_Pc^LquNKFxX%|_t@!K`gfq~sBgFLGWgsFF5I@#??={0>c)&H;fk0@gk8~OBAQPo z4cqzJqj~M*?sFDxD1772;k--|>PWQ^kisj6bsA4hP6erdUwK4}jQiEZu6Mm|=dJ)5 zFr7V*e{y$Npj4U5MxrTQ6ZFUs^K-$0-@*!C06M8pAJ{Q+&I*Gb-WLz5VXpaG{J=Ml zIiQ_*N`lb}Hidl;QqT2b+St?6P#=sH3UW7qVSX{F$Qj}Ne;yI^f#Ss`*)@SuFBR1F z7O`QoEioVk3|m0$UoFN%i8s4QzG^)QePO|~=%H8M-qjz+^b7X}D+EsT#HRI0%jmKT zTxu;cv_mq+b|NB&judJO;;mw-AXCGx8H%KrCQ;HlVcZ%`R#i&wy6ddXC;vEAVJvm` z-GQXlTgyR5vJB_Xz){)*?S~WUFci!mx+C3aq1%1F6fc05|R+@{8*N)SN4P!M+@U2 z$&OIx_{#QcgLDGPoGeO0^2=_b$hHtfsy_N&Wc8=71^>l zFJQ6Hctp%0Vv_F(6*9Xe5~i1uFyaR#ZdIaVN!JjFYL!}u!bhU2}rBg8R2qTGp~NRV?^tQ_(AeSFDm}l zCA$rzY@B~4sN7Nk&OE&m2|-3V0#A*0Z1QC#5@qju$f9Kop)rto>I*dH%Ilr%A>EPp>cyg z!Pvl2Wu^1Q&ey1$h9X=y zJ}ywxExMOMa!iNTvFZkB@Gqdj+zZfP6p6$0XaExM1!jiuEKf2Lcy2h0xv3nwP@mn@Z(;Ep7@_y85m;GhHOi6I?3@!t0dCg;;2 zefV{E+=W(@G+#(@fV|@^$Bv5(X~2wrMmhwT>wq~aKp&&YXq2b2WuH94YR>rfG8s@> zEPp=Q3Wr&90AGyal0p6!eA0Q4rpEVb^Xme#QX`?C`~<@B(LaAUuz8aq+T>a7^GPfT z5l+1iL4-Cop4_0R6zK_-Q1lasWB{s)NXzSEHU&&KBF}yr6@LXV@je1x@)LSGuuzOG zS@kAA*;Zi?K}Mm^3&7b zKiex2g<&8+ohg^GAil!spOYVxk0I~372d?g`6}x_?B?lPa1|gSOc0n-f&N8U12C9{ z9A&G*O{JFrM>8I@MWtAX;(C`i*>Mr#?%4zNj2c)STR4m=1X}*gfGoqdXhZpURT0AC z@O*Q-saD;>x)Y|XkCYdkH=zV`U&R=Z)ziW*Ei@0uXmdOKdI4;4`n^4ZAc>!527x^vX0n|(H~q#(0{ zdMD#NwwQpM;|5BbG)RlwDnekI1Xw{-m@B}j;5n3z_$DgAMQLvj2Ujkpf$Mi|X)8Ka zV3}>32yQ-1+A(FhSC%q^f$&^eRsH@beZqM3_b4RYym?O~wC$Qn*14ona8xfD5F-KV zx}EO}6Y5WtA*`<96z4XUXW1IEReC#CiB)U+v)~_}=M`6~3^u00yPyFhj)!LwS+&%2 zYjBWU-=6{fwS?P94`zFo;*nnTa|BE|KC*vg;8GijgX3FBNPd+A;mkO0P@+W44PL!{ za9WR!tD-DKYU|y`O>$FNJ*ks*n(2D{LtRj|hH91ibfY)O;~_>_mQi6E6i!F6Te##& z4A7dh3M1_~^-9JlZPM?N738CDM)TnKhUM0bNp9V}ae~uy)4;mnO5Ezr4i@JkBFNeK za_5VJ9iVlcw3VU3_Fgr4_|D(Hy8|=&hX6)fW0(psFi8jdFmCpC<(w@GwZ3uF}79u;QBJuHk5&xB2MScIp z+qHScZ02qGi$7PC;Ks_voSiddUDTS3lCgcFR6cOKPOezE$`!~^Zk*TS5?JIL;H!>d zeb4L4@x%^Vd$iqMOU9?XiJ)DqfM21-qp)BMetaSLwZd0jVj>gNtCE!!Gze{AT)pUs%-J>rnshEx4(a8+IradouQ>h59?*#k(!* z&>iX1BjjJnr;u^j>${G1OCH#{d59oBLywf#!2x=;o9$5s5f99|WjoHC3^shNNf@Uq zB&p4+XY79qH$emkCWd%Hk8n>FxqI%EuHAvrf=eIS&_5o}*rA+6B_c{O8->w)a`4bl z!$@e>?9SM=kZ<#qtJ|k%OqvZ^Mk(E&jBXxm^najG&($PB@Gqo$CE*87yOCZD*sh?C zmBaa5xI7M@&8;e;2puN{3Xo@(>BvB8c4EEZU&0=6 ziD6U#kzCex)lH~2Mn<`7#^qeGS+|(&*wN^Dm$Z>ZY$1!-Y_eP;*cPIdl%Pasw%_6> zMC~;~YT(lWHKdLLd?lM3KyB*W+E1o>_k{r+UUqTT28pd15A* z`DtfDbkEwtBlvZ8L7Q^3g(M%#D|cDJvsF`5q8yd9zzN0mqqryqmIgQ8u9(HFA^SI7 z5>S$p^h^vl0VZToExa6DAN6Uz#W_L z_~r%KgD~zO3h?d&-l)T`@jWaB=XlSL2Q&O84k_u4u(uqt@Bu)}72FzVolkZC@+F@O zc@rAs&wa1Nb5m!Y3)>If?zk?r%5RlC*^Z_t!s+t_?{|_-tOrCB?rc{u#n%H9(z^7p zLt{c?-EF^%c2fA6fD&bXT{B6c#KNsbvblH2eKDe(3EcjlfFi{~$N-PIKRMhU%d03?^UHrx#~)XMIzI<%};qyUE<`YV~&zcd4L6 z0U`5KVQ4+!SEsi)`tn6o-!h%at!t|1*o3o`Os_P1R(cDqnLZIzO(c|lYQEyaNND~d zSMOJLUAQJGkQHxFIv-i42?E<+0>S?eevA#Xm2H>EcVD~JS_hj20~_? z;HOhP>9Ic93d&3Q;i;+qvHPz~*d)+atJTiGbiUn%pYA8S_M+);ad>&*3TUCw#;!)b z5-_vMXYW}K=Z*>J?|EFX#LT-E-^HcGgwnnhZo=%9RYe?4(nUWuR^+t4d{0wVDc~ov83vU889<=dF_jNV`wY{>#+`Kq(dvD zIyQWOYW?-`=xmtm+C0^-YG}e>`AdKO)U{=V`vooS`Jz6e;s)9`K-7?D& zh9RL_=uzZ2<)_?k?95$Wh8bsbgr#2S1|&vD;VeUXAFADR4-%wiv0o=O$r$Zx&7lcQ zD<|r7Pw>O_hi}UVt1BuTj=EhNnQSNz-B%XUL(DeE5i4fE2~&7p&sk2u!}!yn8(0aA zFE6}RJerZX8|HvHIG3~2+?h#=k1}O170_iip?7^OL^ht~dV{F+RwISEWt_o9`iKD* zc>2R~GOVSxk=$_qa3};FjNsjY&5!{E zS-cb=%lZ|nv|6X|2^$OnejH8`QY}13Nw!OUrSTZD?qPZtMUq*1kcdHlEGFw0UK~`- zs?ca;rxGEk1SIE#ve$X&)0=_pR?xLpICugh9Q(05q$hUMj$#0TYH< zei6#(EC{@|ATZb})hef2Rp2B&10(3_VoavZ`SQ#M$tQ>Q(VpJ4ttx@->(D(*3}G;I zqZp2eWT?JNm+<0FC6shzW7|GJU+M2BMp!G#nxGYIS>Jd7e*LRL>S>>J(<@{v0*sKw zQu;dYR~2&aYo4nrD!IO!ccnpc$1BC`Na}JcA!-~~#vd&A24eUw0)|mW?{hlZy5JT( zOgXi=?*?IF**D;N1``&y192H65R8w{x^^rJS!JhqwIUk*Y;fmBLpE3P;$VGZl49C2 zlTu2H{iCv4npNXTh!7P;NeS%Uj8@IzT+oRrX&RcDr@=`})^{HWYl7iyBh!Ky)X}U{ zm-6Dw)ao{5;wj6wN`|mUEfhpW3$c)g5yVoQtX>hKyY^5oNr{+|Y-huKXLzp3d2Svw zm~ue_hsS`dw}DAy3v@Uy1zCtjn(Z#bompX|S)h%Wz>GGBdQ%}o6fqTQW=auj{U&8V z3o6F0i!4qi^^7j0qh>-xxGMX{8hy_^%Yn5{`^a_I zX`u*5u1Np>N6wU=3|C#O9h-i5J=Sg*aA$a(1op^FLV8QV%nhLDjquR(JPiqj=xclV zbR6l0tnQSFWi96J8k&jq*-?esc8I+H{j4Vpt)&x-R@{ssH>uFK3aYI8Nz6Ua_Z0H_ ziPQxlq`E)C(%o>xarNbxAC-gd1sY(RM~?AHw!)+de-?7#Sp5-`u9>-wq=2u zV`W>Gh<^1o8kEqw9+L{+56F#{a(^_p7nR!VfSiyAvi`)4_bIt(KhpJn)b50IFcP@u zPID9W9vP4mVbgV(y{U5Q%!|5q!3h%zS6}XD$X1si z%N*I(wP<84jlvzd>SEO<8+cV6pTb=+bBD=P(V;I*?CXzM`{Onoo4| z<>!ePJP14t+46{ln1*o#)Jjn?F@GT=zG3=>OJxgCu9?b8wb})9E&l>y!*a5;5-WY; zW#yC~E<{ACAI&>sQ*#y6?d1)%~(M(-mi;NFh;`{ zO~;3mX}3PFMFx>c)HaPEuY`_qnvBlLZKn_&EGEh3uuZmaHD6vfHcuTd#tM`uN7fA~ zPqVQdAxnfERxKC}A*(LQNep3Pe!&n`s*djr1;c@QfTsPbpqCnKiBIg3f1a>H!l1?| zw{*HmZloVWPWuojxBG%Vfm4pTG$01Z!sL%$vGo zava8Z0vMl(LUj}~qtsN?fTC-pW01v!BIrK}1g^LOP`wfU)*<@WKFe1CRLQWn69i*c zwkAxLKy6G-am$D$!#Ah=o784$Ga9!NE7g`tj+PTyDJBI-+%f$0o^-Vx2uA|#N(Rk7 zbCC?|jB}G|9p;O&XLW4;XJ*HyZ(GC2St5aWBJuKXu9iO72cuN3JXC=WjI%6?+L z0%Ne9za?`C<;`yvb-jG!8`&i6zheLvzlnwCw9(bFjC@B0&x!EaLPlS-__5hzjv6wG zP>=j4L>NL0zQZ!SWikr3a$*J%;WT@!WEH}35jV|Ntdur=;s$spn`Xy?-H!jq5Zs{e{FUU3MSkxqO@eQ zo&(H+!oPtJ6J_?Q+q#Us7$7f98L|0iuhhqzmYHeW;YDS&=FFj721jLR>()oS_F;1 zgK_EiG*=?SLyPO+-Bi#z7_N&jLE^&V5X^v%Bxi1pbp_AmZoUPHk)XG zJ`ryR%`l>eD@`IjcrRhq!#DagdL#J}?+i>bj)xg#yoypCXIjQko<|6k!I;^FAIw;c z>t`4@dZS;H3R{jHKY>m^H9%2&J$6)}eihBYCypQ6Qjj#icntraPZUyr!&^UV+amw zRW8C%ac7%dg)auL0!j0dk8p{?p=z~&iYH&dR+|nyu({Y0I|v?7DK`R7dD+C1ab74hy4{_;49( zfeIhyTD{KgGMm0{^On;tXQ6(A#!Qd+3~L!qH~-~jq&+RqjGkvExjyG9VSI#(33EUM zt5{^stat7Ad+Ep3RRq9+0~6yH+Qxic8{crr%7P=uBjI>dz{H|kR^-Wi4Y96&s15EZ z51{oKeiPaPz=gc>vSHOA(%@vHCy{P$2}`+~w{AWzjs{IT5sM@-Or{VC)rg)~PUP8E zDl!q)jqPxxzM|6kR_A{*m5%i;!%KJu8LSHsk(|VOUv*^P_8t@KeYT2=rS|yFmDfsL ze2v)>vq*z!Xqo+lmi5-2Azk4f3@~TJVpQ`+lo&%aQ05?BNDHRB5p?uYW@` zYj5g{ZRy{-AAOdce?6E@<(i04goGf={_#>Gwtr4Z9GcuU5SyI7B9=kiTT3f$QkIY) z1ARz{yw{nm6mkkZdbIN#cBn9BFEPdbLUX-W2##kl43e&0xhqUX|9w6FdKFc6L9(h7 zesx7H^^K%U6Ft3}7%i%~LDX|twi@N+pzDasg(5-$Drf$?T1FSKNyNdLVP=P>y$-~0 zL2lx(Ur|g)>(69kc1WXKZn!XXy#kS0HB<~;Po%p?$xJ2Fw1i4-I4pGj)1%vFZeZzL30h)SeK zDk&_Shu6o#0={A#KFBr8_jwZQw%Zi-G%OpJ0IViCFh@f{s#!`_aK)KB4z_#NiGrpH z!h$4K`>VM_t$L3j6T522@ztVT*mvWfQY|3aspD}aE|T|LO{t=Zp_Dm_n)~vBi(eJJ z0bvYUjL3CVl(GjK8zzQZ5h7IB{tYX&U6=JfeplynaOGs8T$XF^@8i2<@cIz4E6nm@ zKxwT407%b9z-u70YEbS)YCuSoyinc8w~T(MzlZ0yA5}{A>0<|D%x8u>iO3Cn%2^#m z>gqU_;R1>9Xl}IN-{Bl++U`Y`gbnc3JzO!-xhR6Y*g;j(!>yy|!%T2B#Hc?%=z-N^(Zi!SIOnVA@2a zn#D`9F=W$qddtmJ>KSJ9JHtH^z2{zLx*@E^V2k0rkpM2dICBN>Cq+ z)Siz3bwYovbiRA58itt{n5K}d3nr891^x2;Wiz8YEI@m7tABOe^`qb`&h6j6w{xI8 zSeptMk#xRqs5C&z%8VEcn{$?Y?C394#sAI(-RbFt#=IO^)OHrzC)8L*-*Q|XutSO{ zZ#`Knj+FE37B(g_rJ<{?ZeE3*nj~kdW3s+FuYL$VWm(5__>?I-U_c_m1iJ%B~@0G zYNdg32n^sKgx(<7QOG2XmKdhbB2+WU%mh^M;);wcn(qYeQN=xY=hIpi0NbBsDC_Lz zx2jf7q^zJ(>4i^- z6W+qqRRfhOOB_3Qs&n$HHhHm? zmVKY*b!GV}WCHk|y%>cDh7X-77oS%VMz}#jh;shtuSYqA*=5fUd$A~oSpT&!2U!X_ ziW%(R|NkOOL0|i#S&CPX4tY2I2zEE*`}hUD34D(O&~my~X<$TJd;6tGN<;FG}CliO6t^h-?*BDxZf&QRn?J3r|B@VqHO3M=gs!kB9|;VGz3quS)nHIFuZ zp4$v3S*bP!Fs+N+#127>xspJ3NRR$vY~3xtU|sVc78ON2wH`0`3*;BqKJYyE+) z9i)#}j)ZhH=#A%cjRTqCWOUzu)P7Z~{p!U=Px>+HedCV7rTOZXD_sBh$c|SZ-aNUh zbJN=k1$;A&!6v`oOuv8~Jdh)2I)`-$!3?-gIGhnj9E87TS{X)0D;TK17aaRW#&~m{fx&&^#SjPu@VB<(Nz5YD`kCOSTzuU@=HOMn8!ViFQ8T z`5&@`@d=*MMtR`t-?{EOK@5ahf?GoS;Zf+bUch-0ee*6nzG+arT8blt1jQrF@6Sb9 zkWk=hpB%UsuURCGDO(UV9~Izyv3we*d#=s&9CoW|;JQKNe*1}1Qx&tbimXTNK#eqO zwa({XMHJgs1X)j!`%^kbpwTO+kW-P@!t-T6Xk=VKz&akGzx=aC1K*wJ?Z*^4kn+P$ zW2(TP8lX7Pm4~lE9#}W6b*?8`7GC0 z&yHKrY1C8y`RseP<}J|jEyxbAHFsEUy$ndA`CQdOK7&yQIWv|F&397-qddT1`~G0t z3GDB}3CQwKqYd0AMmzu9`A1~b1tAogOW*R!Td;ox$&qZTX3p-a-gW#~tc8AF;peBK z(=)LOvedQzNBFTIiYNw1k?{KbgHOEAM2n#33mw{~iLc9Vj)WDl^BfVvvDyLbp~$k; ztSgz#bFBx|4Q?rT3=cTDVs>4uswZwNUW9+cwj}Cm8Z?7AT}`t#O9AL1d&~=$kLUqY zBg)2c+rF*>MB?qi`D`LTq=X{ajiA`fj$q?BZ*Do#`Fe!U2AYN#zFZC$M`=kFrLZ!+ zDrKGy67#zDV8B|%v;f*mNv2Y0-X8vgcb?Hom==7~`*I%&lM0VxfYD=EhYjd1yBIuu zaM#u?H6M67e`ewXP!<6s`&v^d=-)+WI;&YWoVBS~EFW7PAg(YAyoN1y({bSuL)pqM z6BBlyqD9Sc=bPSyqlw5hxPE3g5&+ijne{wVt1>K5l zdb{&5wh|F^du;UQON&#}0ZcriGzZ-FqF7NF+K5?KdE-z4RmZ)UsJ<6Q04D@;mm4#bFEu5%zC4wvbNN~6kje{J6?bi zY`0a$37i{{OG8={wuXOosl-*+Iefs#Qd!a@A_R(kO3{yPWm?IsMqY>(K-1X|2g6@f z`umaBkzFHz&kejOu*M?i5clsC5-`Xq*}+6R)p}zSx3?0S@QrVrPnBej$y?+MO{vFmNv0>`Q&85sxwH?FZNVA>yV(kb_x98I}veyd_WAfh=GT$`E4w z!UV#LoET^DFGNZnZAMXGmcc7sZ>Dh;YRHoMTLDqPRmkfFLkBjxKv~V^bmeGo@8zwmtmiO(q5L`By$i$I zk~x4{11O#xaR-jJ%DGH((^V?jGP01&4*8AlP33RJv+W8bDm^@v!H66PZ#2qXo&g;kkB@C|GY>-cA`K&94}R~0}*rc zc!r7wY!lyCnDvnU-`Rna`tHDP$zKK3-aZ;VX_NIM`CbC@7e7VhB9ID_bC9wkiGP2g zgXAkCCCt(#l=BhA{*Nzk6uIdC|L*C`vi>#lYSsQH;LI19Yv6j>zZMg*3YHUqvLl=Za`CtshRe(U+k6T-Y-7eo=FuIE#QW&m|vq( zdTxEm&VaV<(+v*)lJ5@qx0f!Ln137Ql|z;y``o{h$_# z-1!F<8QQ=>=#CJ-2O8F)N`He2-B15I1(0fFYUkLMVydQF@v<6)6Yn>i z3hF)lR5@m)Vv+Db_r!L;g8BI_Q8>Ls#gD6B=rH~GV5&WB5kaCT-!WpdJuR_+%4|FB z#N$r7J;hHNW+LJ+(}W#qX4|RG(ZTd&Ey0M$shg-xdY5+(g0i4FJIX9G_Cphw_`ak` zOrq$|6jN+ZG+5?FH`na)q;&oz-ksgEjQr8rEz-`uJa>1r7kdrek@58)CpN?*cJv;= z4tnt#Rb-~(!|m3m6BSC{OT}2?8VNH+C0Ejw&IJ@*B4}RvgboLvbb6?C`a7skmw+5T zg&jk?+MU@1Q(%+ioFj_tp6yFx0VrMUFk#3>Uk+MWpfF&nfAEPX0s(qUC93)*F^J@n zf$lN~@FBUbYmpj3QY!$MhmeozLri~>&&O)u-0>(@u$>z?lDXm7ER@&OiYOd0?(%FC zoE9GV;|TX+JlSGqiLt372PxxJ24v!jJ`9cXpL=8>PXy{ItMJr8;egkH5iuF3LB@dRL(QTY_)K*%Df)* zUSg>@MV$t6FVI^|+&!lj%gE##cXOfh+c)oA-PD>4nMQV4g@c7UhoHm{_1AjGn#pJ^ zW%o{~WPD^!!Qklahg2Ndklj(tIqEJFW&Pg>Uob5=O0MhnH5WvWYg ztJ!B@qMG`Y)Bi>u0=3yL>%I~+HYZUPxn8gcYXAVz88Pt1*sp8KnValI;@n&GHk)VU zjoOTiNQCWGL)Nb8JyC&7izs{PJ$d3*whUo6a60IxH2o)P1pQ1@ibgAStq^x*F_z8t zhl93qMN&Ez(L-Bb6P)y`s$RuLuZA$O_ifk1(;ZOb3Ga+nvJxxclSUep01&(C)PP_xw;fZzGsnQt67a+74=8cJ=MLlxpG|z z9$BqniazCU>+!_Il`6Sp^_W#2+xLDyRRexe=t&=`R^HQ&s>PEh_VroXKy~u8FO{Um zR4(AB7g9l)n#8V8)K|k4`d=fT^N{atK3|*l&Ol~hqRxbJ-58&>GB9E=-NI|wJk;aL zjq5&M)%Lg{%&j_VHlQOujk+(B8tf&_saj=a8+Q9Dax*x>cnh-WDPP7}U?{frbi{G7 zeVi9#@uKqWkdZ)sRh3X6cKb7>ToV1Y;^tHq6{WBdL>7T6<$^{VvCZYYE0_Us!>vLD z#RK{fl^#HvpXStDQIKQEi|iJN*~&R-)NrmMnl)Ug_00y+m~5z)jZ6!w(ZNq!blbMj zp6N`+KU?g*0zQT)xr5uPfAxV}uYY|bkIm2qGHT)tgE!4?cc2isZ6l7-7IRVH>-4mJzz9xS%5 ziK;A$wu#Ce`PB5rJ|a~V;rjL%HDhsD0~WXU(Pw-&K^KlNH;TBBuu)XTm{j7un-Sr7 zc+0?u3xxHbeYGYgyrO8ks zqbQM>>>n~nXeh__Jfa^84EGz@V>9-Qr7PiJ$(i+IFQCAbihV!=Vo1;0VJCppmtk9B zMf1PMvJolHq~fVTSHnkzTi%$G#EGjzqFXA~Lg^ylL9H5lF;IUb91a!xi*{yaXPAb@ zs#(cQ2U!ihefsCZ2gqsk?fZPJ!pX_RIkQ?}xP!3X-;v;^Rmlq<2%Zv!qd7V1SFmK^ zBP&56ymBOr^~UD-*qI@7T%gYrIi?C*Z*c?zE`+|}x|A#h#ME^g1V1LjsUbKw?GRWj zWu2ZS-$4ZcyM{-Qb3@$#k_N?t?{>>YEi=kAlLJ-kU;xhMX0FP+XP5vbQPGm1M7Nv_ z5IF$%%(`+D-eQJTm$e(_6|~PN_09!sg-J6B{t}S zU8gQzr)ldhcNCE-{-~V2@|1wh@<%s8>5CYk*X-!xaTi5X_xNHog1>$tIJaHE=`jv^ zd6Z{=Q3-O;^I=31}Y( zoZNCQO)&lI2UWHX?LI@4$n~r60Z9-khHW?7=Me=hz}H|8AM;d!6XqO#S-|qKbXk`z z0M$#9=Y{#I1#2dQJd9`Fc7?}NFGRabUWnnyPju1aqzi6ijP`;weIX{~`%YP%|4qIl zh}iAy1vn3MeKFo+L}pn3`qFULe4)iTmr*xeW1{It#CSWkuG)C+val6#&s{p~;Eqd! zSD(+&jGO=M?84o!8Wsheb2D~_I**%?AFH@$uk@B!7sSYx8_wr@+UfFq`t-E$0s3Xu zC+B6zc=*Th)T&`nbQq(8j(&)hZgmaIz`b+E5afWNt&wS~rF)j%_XN zutO!6KGY!(V*4

BY{=wtTlfAdMMhvn`ujFIpPcu`>wC2}V)FW-5a~_rT`xNgLaRaH3Q6 zozG0?gG*!II!i?Ipa^Y*bWZ1GBd_1OvxHrf^~~`LtuEaSGy^2iPRpQ81KJM&+8L(v zIBa~mZS2>{Yg~Nw;eoTvl_$~%c3D9pg-|< z9CWq>9*sRs-2~S%3bIa4EHF>mzl6GmizZ{2!qMh9cG860efK4GcZ%p?w1K|I(Cz6> zFRjEkP20L&x&MhSY+@a@722HT(tf*f1%L3=I#Z=$edqY^U}>ik!O7l4Vw^m5+2RW+ zyK^nBlnXnBnn1&B6q#9m4jr~)<2!+S!p*uheis53+PlW%3I6ooX86WQ&t;2tn06ok z()8ny`M$@kFOt-#AF)7$_3^cNcL@}b!g{grw_-&7-YGNyXcG2Ll8257LLeCYo~&Z8 zp>1y@0(xK&f!}q305|!J-7-=21D|-^T+EKMX1FzPr;Q!FE)52s|EZK!HkU9X5yBtT zn0+-WUOqT-F;z+`tA{Q86%zAJ7hwBg)=})i=>X_8-@t{VqU2Fv$TMR=pR#d}sT<*_ z3Ci=2qi@%2Y)4n>&kQN>&}Ki8Bs3Z%l*)B8EZgCE9VVL;XI@8F-Et{w!zF@`AzZ2$ z4@^n2pP}q-Z#@5h;8iGS`rq}2fCO}BudVQ`0c3){-RH2X^@~78UW5oQ0`aN4UyL~P zO}~jt=b9HH7{~BAKo(%0JnJYr&ntjm!8^^Zxkil zP{fU|>#d`URKNW3I{eG9RBY(mh+M2e{H@sln$kpL&s|AotdR(ll6UPfLf9zbR>z45f*(MxFw}p##YX88$|;2m$@F-1p8)5d@+RW?lNuK9&nn)ZDPq`BLYL z0gFE9A6^ip@gaZb!{<<%dDh@1fCFX6^dqDBn*Rz&x%UcY#qT_1jH%8l|I-4OGAc(E zxYHN>VJ>A^ATma-Y)0f$kDDR-&>D$PT_0k9a{vTp{+OV=eaTd$kd(N4za}8i=j07a zYt+Sbkk6y+hZz?T_7{inTxL^v`T<0P=>r&SD=2PgZ~@L^`K<^b$4hJs+9I#_YsBB2 z^9Z{4RVh3%^{TxdEoWQU?h_3>sGe(OM$U?c4G03*f$U4haLyxT|Kpc4occW~W-*01 zOh!ZnGj$^P=g$Je^PuIhpFV`YP=?CG>F*1lrY0)Jdjazqzt?V{k)cakmN@HD7VBdq9U7q09YPIz0T2X+&y2N5XDwe zJGD>izM}sP^zb2z)X#g)Kpv}`pT&ZrP4xfm?#tubDz5$STwh)`-nfkcEq^vevrte9gAf;urf> zhN>=DrLm3})xFDXHY+=sZPlA_>7a^b+_-bay2sXa7ne$2olA1=Y+Y$mY8n1xmOJexY*+nA}>-P8bbqLl}%cRr4B3o{aoe-0S=g)Tb0nS4a$Iyrai zv4QZTmmx)XD0vuv4P;Fk8uOPQ9*jz4Y%Z%1wu@iFWIqPi!!&SNEC7wK(-?Aw* zY(RX%RG5LC486tUH|F{`-TS$Xk4fA+|l(N?ow+&VN+CjKDsx1 zrRMq?R?vLAclO!b!u<1wH7m2L4%ZnCups$s>a~?~$057+5SMc2qXFukqD&PDJi&G) zE_(chD)}&sO@kmG7H>>y#lNxl#V>Ar%G+2I^;tdnXwPty^l$?&fyHxu06Tk7g(Vjiwgx?)z%BUTzhtz zGUB_P=ig{my?@E)j7(#K>KIem;%!b7v{zyF&e=L*!37eyV^*1Q5NDokHL=s1wW0%u@NyE`r#a(sEHbmxRT$uK3$s1cE^ZjN1VeXN!gAzyE@ql>Uv6T zyk25pfgv@7h znClFf#WpAiJc$XLJR_~2+l-rj-V+K_)Q&jveT#e?qy=CKTq1ki^n+^_Q;KLRwHEv5 z$)5r~(nb3T&oTK9fVk!2VioRDz3n#Y0=TT1=9KCC4KZ$Ed-)%^*-%bR_w$+ww}jdc zZT+xW@L~${GM%LGyH&A8E^myZ@1%MmI=6j(69F3tv~EY=3)P|N_^iAZd^FV|IUoCt z$q9u-lg*@Rbh*@O6V8IKR#$G;;V?(3m@?6omu4aXk{9Zh8mTCL%bB7)WJTmP-h z&?&yzqO!KMLAXw%dYJv-hYF2CGHBGv{3O&e*?r40)ymo$9H}P{u`jWN3VMFD9sz}Z z4ZE}Lyq6OJU@W2BWl2uz=zM1#6^95A(d;tlACv0~FPt->tNHjQLH)?O(SZ!7rhI&b z)~nQ7torpUb5~Rba$MP>BG=jx@dhB{rP6G?(&MgPRouEFTf4Clwz8Yd5R$80@ygH* zBQ~G0t5fBNt+(M4oocWd2lF-R+T191-L=L~WH=`~x^|0}IDOlI14?}y54xXh*> zc3TXNi+k4W&(*lYx?T1s3Al@lHM$*!>rsAX5 z{DuwYp-hF#YwpOHeaeCj$9gqcAyBgR8(NZoW_lQ*&7$kVM73VL5fZ*ym;~ti-0I|u zoQo}J^$Ta!=NEE_sI|>e;F<|+rxf^nG<};Pb70O%!0uwzDK+b*1pAI zaU)3{ldLfb8uQ~iked(Ij}@4O1B6L6l%Y}!rJ>K!P7~^5bznxpmw>Q6$Y*+@ z7*=H%bss2zVWLOHw_2@+ZzYq9a!>voN_{Aud0FY=Qt$$t*VWQ2nI4n~8st-Js*_0T z4&JF~tQ`cmS2A6p@6yh7*ST@g5{;XpzOe9u|_`-Q5u%UzvT38gpbvUL>XLeqfN*8dL z=08}h2A#!OZS}Z{{DF(?Q2nsx;$%qA^jfvk^W{Sq-Lvgr2CK-=U;Ig@EBAbQ_RpLB zE=416qtqRJ*g0eT00ba-iRsagX4&-4mw$j9Fw09rLK#Mfkoax0Qd?JCkf+VFSN4RQ zW&Vn&MTavwGt;hFp*Pr!xgn{5!UGg?jAZLZK)ec$jUaSFD zLd)`>X|FV(OD|vi2U~IW($iknDE5BH#!Y@6dp$<%QqAA$NY#_)CBXl$q4|xItTg^p zq$rQNOK6cZF5U_>iq(eHGX18B_nawE?Ugkym%F&I-D|EW(b$6iYHBQ{uAw|DQ#2~e zgW^X5rD}v%Vk!pzVklyxt z$zrKreTGQ6T8czifs`At@+Rii*uArb<}1v_I505q4l4IonU~9aMee`!mHG)S7b8Z? zWrvM94)gVw87(lYfgyDB*3OlyI=5~%h`JxNE$?jKx;evOF-Iq6n5%VnaLOI_QFmWOEc;zigo)!6j_=dcYum_^E*I!PnLVi zQUb&cjMS}AH)4r=h48_+c|r7+dO_~ZI@sla8X)Z)5)X0vvd9OI zW7cAbcR_F}!y{UT-GYL1;sgoy?Ge9TK5(Bf(W{6SngePIIK{R3c zg?m)#I#RXDDjvQ8S9y_*cFiofzRVCn8)+yUxDOpQM2}FSctEmn2Wqizq2}v#Fb`JD z3NT17z6^EtP27c^E_zIDy5R;I;}`Bkozu*gr3J)9EJ9_meIta! zc6q;>368UT60b69VT290Yb41?g;)fU28CIzn4KeIbK$dmEP<6R)u(S#;zD2*D~EiF z%8Vn#K(m`|bu@#iKJ?wadD{zD4cu z9gsAcPUpeKYA`wM7&47>=dz{@qau54{rP^UsL5>HjiWr;sgX;jiLN|1A@M9uN$B+a z>;Y4flvoQ2#xEEW@4>jI^xqcyn_Xqel8ems9B^x`N-SEm{tbWXZq?hF*`SAM97R^` zLr$k$tS)24geSwUP}!Q6?Q~*>&Fe1T+nnCDTCmDPaDW-fQzc%u{R6vJwnBf{ z^ABV)P5%TGtMxr$cYapUk(VT#q%<-vf|rTOn>zj z974+bR*zxds)F-bzM$Z2h!8?j^z-{xz)gC`3foq+X_YFAHm$UG-JSwSlEU4vqNMK* zd-FI*v}MKgS8Z9mWd)eD=Dh7IEmoUlWeO^+^+ZsG%$qAorw?3lvBjcu;f8P4VsN0H zy$^#U+^1ZPt*{@m%?o>cXF*o7UEVTF@$Sbkg6tIboC#|ymSe6-lzb}M(omiTeduE; z9*|}QX?OlZx*INh;2{@6)Aa+0hl)C{pSbIT4S+qv51@axP_7_xTzN%Xf|Dlnkq@~B zW1L!O*P2riOjuwzgV_q|S?Eu7=U$^FH&`t9h%_!J**)9~Jxhp-o^$1vd|qeJ8T!{@ zsjkXy>DSqH{ryUVLD}D*qN(qpwdA=(>cAO$oP0*%S19HO`K{1L?gd4>DAr;uKZbpL zy+zyz@BL~M*k7<>_e-te77Z~ip;HO? z-J=jZ*VC*3wmit2tb(Nj3j{s$AjYbheE~0G0s8r(Txxu2tBCGQNDm_;RWB?vl6gej z^n^WRLvl`Oq%2Gsv%kVM1{t$202yG^m_a;@IbjFRMhYRTSuHFF{qyFgW+s+_mIm_# z4X83@q1WtU3h;U}-3-^W+QHLmSe-kQFGD}Q^O}#3#zf}g*(4_4O}@Y^+{?6D92c5yrg`N&^j^MCe+I}oz$8rs9pY^0+;O03*?c;9#W-NI z6y!P1zt$jj&3?u3$sL+pmuAN&PY2``1e?lsWdT;)sXph{>y2ZZxOF|AZn+Z75Lm{KPRMDeEu zmlMUVXmd{9-uAqeF8Fk|Q0wcyTxL|dOUpe$Tt|EwIz9pgjP+}Gt*UR{44ozN78R{- z=t};fAb_38GB@m>;}`@xRp1JwlLWy4nJWMuhkSCgjrf2bHu~7pIIf8jKM+40G0 z?P9gGunU}$%<Q-K5y$4pzyUQ4UyQug#-?YNE?7n9_8XT>@F-s6dI*T zlROGet`~4l!G15;Xdjza?BG|t3v#vw7U1w>J{tP7PNST``bV6BR+{RUr2GHN7oUE5 zODx8I3;&E#tHpN;#qNXZmv24&bZpBOs>K@N8R2=>fb$z6ykzCPpk4ROlEpC6D1;35 zC)oPKY>{R}wKV`Mn-1GiS!^O`pb>@HGe0t*Wvh>-(wM#0{J4NA4a$ONaq-eBr3&Uv zhR)Y(+{Nwf#cn7xomW!58G=WQ<%-{gZk_SlOfsqpA&9OND~>@h-R*C0_q(y5tb8Qf zSpi`mBlYdvxxXvM*xv*-=TkzF#iPtpIvm9JAy$$a0HENXi4G#q101B90$!%VcaNne zRHSGTlMk>>VktDY)Z!Pvo6nwl8JhL5)}?|?ZFsaVf3C3bJNMzEQJbu(PV9n8smL}3 z+0p04=U55!7Pd`gvWWu_UNW#514KLzoNu#E#$Y?~-Mk%5y5wH=9KpI~?hWC2#r427 z={yRKCHPjH3qio~t&0$#D=KmLM%OzB@xYWgd zg5aPqqPzmKvnecaX$>$kP&W2!mhRpxef#Eo-A}LYDL%EhsN{d1`3*Gu2u^11opO8%T>A?3f8@v9+w?EQ(JjX_^V9 z#Y~hY7E>6FiizEN#eX9Wb_>)np9}@9r6oIvE{W06&`RY$18F31x>$@#AAetIRJ;Iw zb8;;&erd@z&L45IN&FHeXNLZcg`Q#epi6I5#A15!Z6pj~mV_;QNP{U71bJAv6cVJ@ z(X5cSJdGe>0DvEmPt|Zs8g-A>q%ZG0cyHC^Q)A6~lU8RulzcDwmqW%&O=_Jf5*}8o znww%Ko!Vr5`e{r8Dc?iL_i{S3=Q~GeOo_K?Y8EEX!(^7F*BSLqKW6%un~Vl4Q#Lqu z+*H%t61;hbqXC_Iht`= z^<){GaKL|bzYKrF5MIOOuQcj+81q&3>I~QrQfwxLM{wAIW=N=L2W=v|ax70Y?wRV0 z^!P;Ri8Hox(tOn4RKWC8*Q$D_iWCYQ3^q>5V;nF4Es|Uh6UOKo95pm>2!C`vgv{w+ zjF7Gz3elxQ#QEq)CVz-L5D(zspJj_yku_N1!~#!#)!>c`rKnp|;hP0@ttoMq=i;1Q zDSmX7(xg*V3{?fyqy9-zdxf)1{&00OM7Y47^uF$n)+vk?fJ)H_OG6ft6k2@d8FJWd zHh(RH$x=n5c{ZOU0LQSus!@LRiMr%tEcrN2J9P#~(!oqSOjwJ_FC`y>P49 zcr1GrJk|-D#ME2TjFc8E3mmpM%};aFT=OMb13aJRrReKM(FhrkOfHwq*F)LZV}3(S?uN4^3rgBNEn zV5>#8n!TaJVnvNge2Ioc7GWDqS~Huy3q$@wZLIucn1~*Ih_4We__zQSG#WzKt27+2 z7r&>};SBaDj5`{&CGtR_&k!%3QmE`I#qXezm+X|s0oq@$2iytBq2+U#EqU2VT}!iQ zDMAzx4&j^!h4Rz?`3aqTcnF1z@krA^;}!R1ica7CdzaOh=WV*ZCX&G%-rK~F{^)jH z>9W%O_hqY$&a2PsSYx-`dtonb8hp%dFMIiByQ_QkzPs~`s*K_8_(u%BH60h+k=%Lz z+cst>c;X6gX+!n)J0MAGJs7(d_r+peeWmyl@fD(+l)YXoi?KqMVFtDdR31Xi5%2gB z@YL0K?TB+=C+sIJt+nmAEfY54lo6#te0f4Rdf;AT6dNeUsRTvn@NULGt2tQ+OGTgop#EUM^Z7*u5w88XiWkXSW?&TMWHuaiu zB)5IBr>%Ly@AMSGaA<+k-y7O;-qWQe4Nil(x(CV?yyja`^PhveE(5cro%sRRshO~vpoE2-X4Fu`~rJ7TTl()z4Sr5j42U&Zt zVZVa-2HJzOLySg#1vC#y-yKZ>DFie`k3p*|sjtDcz0Cf7iwWw7OgSCOsRC!|F3lC+ zRwuuwc140}XRhv!n<3qC8M|E6BnP(HGqq*cexdukMwHqz=Vqb&Eo&)+K*aR;r#Y zHfdg5zq^Cof1lq*(oJEM(<}Z&*dkzoRE)hgq9=@X8Z|mfU7cD(0o+dosmb^*ils{z zmb?*gn9`y4Bp!i1W1t5o+#riohIr9nx}|~8daI~`R!N4Eq!-yh83b-%!-bkTgRUxu zMUh3`bR=d1(?cYvbjzvXTb1uwHLy)JfSVH4t*wwTRfw52%~Hk@C>20ZCbM>xh-;)u zJVqQ8sqVjT(aR2)5J&8sHQS|(T{|)KIoEF2$Qj*#pT@z~7)*}jF%qZ|CNTT!MeAo{ z4uCf2G%u2wkZ>4dJe2J|v-v!wRi{>bu=rx2JyOnN7M`PB8|FDpaTA!&*=aKa2lOBy;&f($Ie2C60mP|i5lb)Xd z;SL-wj+V_v7v>y`ra&|q`BQp|vG3H0&&}7B+|sY2X$XheD7-7aMN$p6rPCT19ijV< zi8#;)`t&etwpNC6v;QX&DA??GWyGPtAhF*U~eZ;`%&=W$(4BRpA~VwBd}( zrhVBrTzks=htEFe{;K+`tgCI~r?C#+898hB6LUXBTl-#BOGd`~Uq7Al?1Hv7Gh?IR z9GYXm$H3fQ)tM+8C$}F`BYMEBikwZW?)_&zj7BtM_cR8Siw!Q@htW$rCrbWyR+u#B zLe|-}*UpW{`nfmNnb3funMi8eWC_Svw4lEhf|v_=hlb9Ns+7(h1MsiD`mYcsNyXs3i&-=NF`wMbZ!NsdW*`ipfZF` zko;Ein-;V3S7+8U`g@`I_65x$EM_v!u4W|9Oy9(n+$M}3n+U_`nA9))ZVoAWEP9ON z+|Zt*NtjiYzqBq-&LcRa{LWcwwBpR|^>A86Y98@lJBv=$+1f9~D|mnXzv;!Q+RoZr zp8V(ZVsRrEtnNR=b%-$FV!{mzzPJw-J8Saf0tQ6+j2r>s5Z%en=j51f)!6yaO6%cN zvP^gCyRS*48Ka$sUVFCqvNkKb9Ge2V@@yx@KQZ}m@)0$Jeqt)Ed+_sb4T8 z&{7pUzNy3ca@ zk91d@u=yhh1!iok@_$y$OX$}j+{SWY^L(B7Cq=%ZOL3XvmoPtErCg;vPx%q$_hD;q zqw4!=lX^n^vZg?DI~MeH+KaVc(Edorbldd`{WkrphUJD&7?Q^GjlVQCo31gPFz+xY zGF%zEGoH5OSRToYWIkcdvhKD%W~;O%vh-O4S-Y|hXWfgn)i6#Z2m<4y9GT3cN8QG?S*>_zfkxE zsabkSdLO2F`rOyKzwZ8T&pyvH-UjdEMVpI0Q*0`3Dt^Nk_ub`t&i6at|N3+M&Hml~ zBmQss|EHw1WKYSRr9$aI>2&G)WgE(#DeozNH86V0Zz^zY;8J>K-z%HEYv zt$b@`a#h2sy{o>k>Q~K$&HJ0b+5GpG?v^Jb?U8#UZ$vYr1JRqJZ?*nsTV~t3w$HR3 zZx6QL)1m8F-Z9qkv5qfynmadlexu9UHP!XWuIa8HcKu;>;p(-k$5wy2Th-mseYpF@ z?zeihJ-(jyp2?p3dVbqm*BkG>qxXg0|5>wU%@^0Y*X~*SR$o!yVBeelrvA$Qo&D4O z@2o3dcgwoB*GJbsKaf4}v4LM~DBA#eQlc+%n5mwK`dIdu& z4aN84S&t`(rwmWtB0r@o=iyWa9^|o}@*$VKg0kSp>|7GRE#!$mhX17C5+4+D#E%O( zicJ13hm8r@qKJ1r!Y_h*n~;w*^j?p+F7BQ{x_}Ty9!2yGk4>o*tZ*H84B{~AU>7b1 zEK~Jh9&I2fm@tTMZFt`%-pO%)3$F{o`jl`5 zT1~<`4?~5MNOIZh=mO`#~@Ctmk+Wh}w{UGajO!tML&22==h@ zR)pDL_fde=M(D>Ozc9O7(171Z;V+@~KzgE&Ot@4ha?|hm3u!HM)~2L%1xI)?^3?0Z_V&G(SvtNzvLmjaonZL8s;>m zPql$UfpZ7)6aH1Aa1d?r2p)Ud7s|X;Sb;j{!lk|7Tn=YCZ`sY`{r@27 zmiWLyVS>AN2@g|xbr+r;!hj~q{q^wIYa#-yz&an>Ep7>D)6K z1Ls~Kru09ShdV3&ogJmoQapnD9R%THvdc~g)m-y49aXqm5Z)zbU?;xKHt* zq?YtjmXssqOK!<01*M<6Gu)YOo7?HmbJw|Vci-p!lKW}*H{36|f9e6N^{6~rkHKT} z>Q_LO@XJGkw^;+|2@g`Uej*Ltq^+~m34bFb$C&vTv^Jnwk^ zl8=H-}nDkjtmq+>hEMQnmRx zug(9WHtSHE=fv-duZX`?+_I=P_bMKcL`f&vB&U=oNvEmJQPk!^_fzg?QJWv3HX>@H zL2ay_Y)^iwHvSLPX2f%W=Q7VVoZ_IsT?(1_;&3$$5@wsDj({o>(yLIlSxx;e@=9=fEWYg@IXCIlpXZG%s ze>nNp$={v)&B^~d`Nqj#ojh^k@QFhwt~_!1iAzsha$?_!UB|zD{Nu+zcKpWU*B`&` z`1o<_arJTK%wJ~yH1oTe|C;&Q%vWcgnEA@gV>4f#d1U6_XC9h)aOQ!T`)58qbL-3} zXFf4=^URGiH_Ti*bIHuUnbDbTGh1dh&1{(Io#~#bnprlZpV7Vkm)Bo^z5lho*ScTp zd@cH#^A`{N;`6WiU-iCP@M`|gUi;a&G|TA@jr0G?^uiO3k0g|R2abuNh-?z> z(L6VW9y4dNNS*|*H*(CzZ20C)2z`U2L&xllVpb%SfrO$wksTeR@)GuFG!?-mjYx@S z`w~ju=3^zy6m1)BOQ_oh-3dkU(7N*m5!rQQP)hXmA*gxCB_-;~S3fi)P0O(XQ3--l zZ&IR)zE@GqXZr>vVB<(!O6dCrV+fJxo1T0j@`Ylq*wE0B3)o5+qr(Yd-C#oKrpRu* zySftvvP4|4GnsS+(S~LdHo>1xd<;QP%09dKtdNSKZa>1$GR4;-iR0E;*G=;;`SX0 zHVi-#nzD+7E+7%KW>iZlY)2Hp+Z-FBD6v)!tv+x}XBMJukuvu@;TQr-3CSqu!pZ?c z6jhH&ZAZLuYE+JF!9@*{kX!&V4JDe^8*i11Fr6WJ0<-Z16337`s+l*ov#rkcTn7D`y?Z5`e$yuC7!k%c2g0uF`& zcp@_zla9osL?+Nyk+2532L`8=BdtS43DcTPTYA2B)bX0$q_KXkipa*#x-HX`!WX!Tuk7v~6AKt)H%C*;LmM@PP`PHcbqjC0<{V2nQ-1jTMRd zb43MV4_#D>&TG~ZwFY=AO=2gU5rTejAds5!^^?D>;1bMDl8cnK{^Gm3`k#uY+5hI?`+&}oJQc_8-N0mNR?ofm{ ztsYDp9+i~Q*oZfw!k`Lfr;Ns3@W+P0A5KjZ2Wa5`-u8IC z%Zn1)QBOF$6y$fBLI4P{WHp!w8bbww!w7N;B*-yNqZI+6z~2-nT__90(wN2tCZ!3L zFNF(lBhb_||0$sdGm)frZwD1ht++D%jaNp-bV3*ytdtrtpcC|>9EeQknr+opy14r>2Mo63fdMM@T117uXs|tSCPM@*^5Mf}VaR*wCPr zi7J5D#;Z(Z?2|Dc#{?}RSDnb&i=I}Ao+nqRJut1uSVPp$DgPfM>5kJ8*gr$Xgm24ay5;*e*Q;*e(t#Uam54p%FDyEt6r z8{=@1?*a}N`7Y#ek#C&CMZVn}F7i!qxX8B$IBuM8z`gt}(Tool$=()tCkg2kEfK-n zK8&^SQk*H-OL6w|IP`(yT#Up`^SNHa-*}1xvX@d^DtjsVWyq&V&hm2EOA)S+y%gai zh`Vw=zbpA0&+jVPOVO{Ey%hbUNV!tZ?;6=l5w4ZJ6yZ9=T{WNILH@?`J0yE4`t`Dx zq8~=eRdRke$X<$YMD|jI8w1A-d}f??YD6uxw(?oQnf^F&T7w_%JQPI8p@`prejHrfWU(ER2tL|X zf}O1|!w%m{{{3-$f1Eu#_t&`^9*^?X;Z|tuG%0oP--Ac?Z32UH>qLlR!X zo_`g74bb@{Uo{>H<&6sac-#rRtw+o;giOF4g$$qsi$&zGgoebqa;_F?=X0({%5Ib% zM`}rEK@M@qIgJXt0a-Wv1Mm-GudNsUF~nJi_npFiVI1$1LObd(0m#XnMEEH32m%Iz zcRA1bgE>^3lE>*vIW^8kj1F-Cey9f0k7-dXe%wyFfW({z9 zE}SgIHsSNb;+tBn5qC|{uM&8Rqx@aM1#l1GUB=5wK=7|?m!&0Mm}1lyrTYzk7xwN->F`h9_ zwcGKRN?pK6oR`=l^uwjrTaLV_KTZLj<&ZI52Iz+Y@fhBx;IG6(d8Ki@43M{@2LDVN zkysD-(zWO}r}>97X$|-752R~*qqY=K7(L{#)ug@UKT9Atyq3%K>`nU7r+N| zpwHlf^^AO+=@g<)Zpf*7A)8qYUg!t4mf{@096X}}HCV>^OAvje7BXzGG66~L2Gn{5 zXu3&Q2~EdlaD@nZLmTSY0e#~xVKu0u2OMDy>fHydtwReA2piBco4_lEgw4Wv!ugPw z+zP%C6XG}zI4B$vZW6vITr1on92RDTqr$twCxjcYRX7f#3R>tu!2lUEG7~dH{nWxTnU&dC7RzS1*@ZcUW5T20%U==xLwHQM zM);=i5X->{y^G~RL$-hwGKsmFhk02M>~r{-pOwH=R~aj30an2(*)mo|HhozQt7Ua8 z#KNqeH3*+!%h?Ln$eP$n;T^V$HM17T%|}_Qa4%~UKFQiy2kT^A5U%fLJ;GhAm#txI zS)Xt}>u2lOdf`?`2@J3eY$Mym2H6nX%+6!yvn^~Z+s0xn&bG5*Ho`{P4z`o+Vq@$A zb|D*QyV(THnC)d3u}QX%O|kv#Vs;5Tz%C^TSat>b2)mM9#ja)_W!JE4*>&t7JH)PM zhuID62)hyYCVZUTglox;vQOap<6GFRn*9@FRaGrj+zr-*WjET8a$8bvMAZ@By*tj| zY8q-)1G`42;_9CG?(HLSad1rR8&j+czdBXyMrftEz(Z z4!0)d)~4LLlp9L9>G&<`-D4B`r$*)ARt{aTx~g5v3}tmo>U*k|)h!%p!RkmM|ba?x^&;@ zly>K2d}IuPn$hvm-Eg)0_7Crx+7+MT83e24<_K2H%@C{(8RN)ga%|s)yW^=+g4J@Z zgVhbjy_0+P?wOn#+cOa#SH&lGj?3*645so4*6GLh>>L}8kH;rQbSdwiN#ocAGTk>i zOes|WdC!Dq-`MW4@wnWK!CDzX&;r#B@0r*+xt~BLf(h2jC=AwB8AdPKKXx%1c49bH zYDh+RFcgvFhEwn12nQ4;?%xh1mvqg1rY}_G=^=+qP}nwr$(?9^1C|*tX7p>YkU|Rjay_TB|yF>U1UU@?v5D zAi#gig9QNpzx#sB|Fi%1{Qoa`WqKw6z~bmXukwE|5bcxVG`2N#001mG003Yt002aV zZ0}US*v*9i0C1}KkHhsJw190f+07ixZ2@XBpBBLOzc5i3*0K1{`Clx<|JelpfdmQz z0^Y*b#p6F-%zv@`#{+elC*ydxu{ZvYXM*vckNZFH^=qeE+ZuZOcdzl=|7i(;=HTb; z3~f#Si}}CYfb##-dgxdCCOFtTy8r+#A^+u71^_^asJbaN9Tqy4u;eOgen$MYFMjKr&ti>na+jqz-Ybx;jUT7rpi=M zufa(yA-TkdCn1q)EGvM2_hiax`gmi(0EflrdclzrY4)wlE?XoOGM65Zbzu31KryOv zDKlP~=VUIvYc(&_n4V2Nx|(ZkU{Ya`SLxl|_7eInvM;JKdC-~hF59%J{8gZ8s*xA(-Zy@VkPzVn;oDCiUoZ~y zd`=a4_!T~VIKf`-zr{LHRR`Z6oArG{z)^ZL&nGLA+uSoxbS8Ol`V7aokBT3Xo(hP( z+9AA$K0@4d8K?G(+Z{kE=#z$hPB}TJAG|HIE* zTQ)h#44y8HVIs_R_t=|UHjp!==565A(?KYTQlro?#(5^lyUz(WLb73Dy7B!}-xD1P zBH1c+Te}vNYtBs%bFya8%x)LtSejr>!emav;;Tc**d7miFAk0r&T!Ij7OY$jnucxy z%HMehZ4oCYujr8myR;h2H!=^$hH>=^?wg_l19r=c?+gwXnd~g$Cboc^n#T;Gt@e15 zn;uQUSO<7RPYBQesCs?#bF7jh#u$!u`;-2GfOQ>eAgjw|dNTNpOt#&dof28b+4b-D z1fmEtM39qlX9b~H_kRdEv@cz%FS=d&YVOA|qbvJy8))2-CdMgS5Wl}~c^%9v&l3l- zS+#zbDbs7Mcu{2*_CV!qJn2B{UA9m%FVT}&&KZ`nx4;WB%$(@KPfUVSfPtjFo-EwJfkt27^E z8Z)JXmXhG|m;gy3`tV#s08jr&+bll_DV@5LksaIScMWbwYM|7_m z*q7eiB(rN%wd`+50sA4=p8%zW24;l;l4=}Qre-<E_K3s81mK+|tN8@qM z@~FGC@FbM5wrjISp(V$f=I=6`o)0`4&8lfVAS#R~s{pImvBny$#a@WXCicNcM3rwr z`-uMJHht8Q6Am=sG#SWExcG^#6K@)Ywm`%UXh>yIZIxgkcN<5=Rp4C$Hy4XsKO|q6 z8Ah@dL1L9~vD(b4?ty|*nqYZL65V+vT2wCqWK=vUKmSi}pA38d*ZRRP<9Ny^nKR_g zJ!Mr2PCX~Dn0GYi;7d{_r@d3urdBG|ab=$i%To_h)LHWcu9_x}06{$Beo8A2s6@(^4B_=o#4

Yqh7OdB% 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�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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.woff2 b/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736 GIT binary patch literal 26272 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�Eo53fd-;B(R!B1iIIdcW8p~aM%r;bv`+4KtJV;&Y# z0SPPvW_k-m&oGsML|2aBiewEPO{VbG13B|^8Ze5&LXa(Lw)-xC00aPpzpf4P*{R;% zAN=w-AcC9p3~>J{^|LXM%bvsFI4%+39{$|b8B_I-kr=~j(P~4C9r)0n#KGqA)8z{} zq>xeY%v<@N=qhob**`fWa%>CO#>Gyt*t?l;(Mq_6dSepq_uvA_Y9-dnC#NgMb@D|d zt!O1VeSEO_XR#M`0G9vUn?^l~F-kTpmuNHC17J|=r^b!t6f(kOjLmtqV|bU7^$Wn3 zo5QZ#RNKg0JBzF$+tN&xZPKxE9pBOoS__Qv)@_O;smM)USWkDHZ9eCoLgi}Tp{bLy z5yLadGXp4U(V!lJAlR#GwNRINZCA7dXI{Do9x3nalkr^cPkqB?{<%F+M0t5wD4Avp zY=0wqlS_d*E-#%5MZxGX8OQRUNuH&=N=}F(1-2nTGH>x;l~hWUkAUn7*+@ZsZ(MJE z!6)$(nO>!Eud%-?Z7kKu8@H9SB?5%CHqh2Yr*5Ul?|}Sc8Fz5bdnJp!6FFWsK2@+6 z0I>R-=DPmHjdeB6b43yCmKiHYhyQB~c+{S#+WD+9G#%x2YvgO{2SPp~L zwsc87=PrccxW$4KShWsLXJ9&pKzCClCc4{5?KH_R?!U;x8!O5FAyy-ntH*LNR{QXh zCQhv^thR|W3^W2i7I{<0hBpRraPC}9ZEcNmtzn?1hS0R8Oz`+mIjd_NTqM^#!0rN? zm*Wc^#@Vy7t;f|hYnI!s;!)R8gX<@h>vI!nqpLbQKf0w{`yPAR{=L%-x{*7sGDvsE z!HN0>X3x1rU@yupXw4otJE7dgeJ^WgwiHow$lNkV&R3MYas_mlhAdF34ycU2aiH3@ zC01|YY#o>S;Zxbu4}seqOyZ1X7hAj6Zvjs?jM*Z-=_=6(?nO#g`;F*LTw}Y_G{t`a z3U-_k>LCc)=+*ne9pIO5=QJ4Z-=|_?sI`EhVUF#~FEtj6;54p(cgEFK)znnc`GBDh z&mF7ft`v?q57B75Ga@cRXCvtllS6-Lu+Ql>lqFOiL08uSw@dtBcZ0gsC{poG52HMR z0uYA@fn?mc3@*I_mt4jNW^&*FzN7kT_c?HS+?~l73pJ zR}CJ3IWuqm#D2G_Wz-vJ8HATy215~uPDi|M`-n>cf2T~NpBJ1zT|LvgKOl#d)&HiEco+9R^Yl| z?^sZ_bsfg#p@-kehqr*dDcDVvxiQY>G0&~vN!L%Mb!WGZ%C6bSL~mluBlFI1xbw~& z0p=!b1Cz6PRN>un)}8WEg=e=CBppg$)X)@K93E@6Ntc8-g&G#6L*V6%ws43&p(jUU zOU(0Wm~4X0Q36GICf*qVmd0@85VL0vjpi%v{;gi1Vsg7nGsx};@bYiKg+abn5-+2( zF&fP8tIF!;GF5`ogoLtLN_tZa=!6;5C2{*-jI*k;>oEj|U=|I6X)rTili=03ojt&G zPQV@c`VE_=iEdp_3aLiJ2cZ)|ALMO-avLBZ{m$DnxG|}jU|_~ISGq&tw6kCOd?Yd+ zGr#+Kgo~aCoeU|BJfqDs+@LfDU~@$Z%J*47)nwp!kFR&;^Lt!i7j zu5az0+b`CVeX&VHJrTQ32&UO%(+-R4X05BxxFZTgzw9L1=lW`R{S>%&qs7|mOm=DO z#59@_%M<0<=*-;)yJ0trZWZO_VMdyKzRk|Uh1{@mc#Jxi;|PuO+5&lo*`s?|>^+9r zfxJ>*S%M99(82v1X~E1sGAgFP@~xhen&-7FL1CELF>Y$F$7L$ZtZyiyvG-+`nLMuE zaZ{NcFpL)H$6R?NZ6*2wzUy)zEx3~AVR9Wi8=Q}r^x;bAk{~9%SQSGV!hHqN6 zy!%tNVBD?MD{#F0qc+IOGP@I#%%5oa#gT+Nqv?T2Y#;~|4!o7Cz%gWIN@&L=s|`=ihHQav zCo@!G_WJ%yBONMwbIaXmte}2Qt)TfPABSz?!g>gara>Z5E_F`}u7`WXnJHNFNBN72 z=L`eMERTNwK5NR1j%rXK5J@nKrw@MIYn8JI!|F7RKc`zix)Qb3lDXOy0a|*VKd^j} zfGsqPa3r#$Q_n)v|9y<cj#Cd1`{w43n1*n)nrRNC9!F3z15D5pmtj30uf zGI%InC=rr8vKTKe!iytxRVtesg<_HLMIwaTYNVw=z_sw?HVEYkwL;$F4+K3N6k`TC zco5iw0Otgm;CP`}!0wIws&Y#|iG8RYd=rYb)I>GkU&sr$jsHsYZ%gS@y)|jPmdIYV zKwLz5zd(F%`2``>FrP(_K;{{Y42r;RGDJRPWwmVjo3p*8QJLcV zb|3GLcP9M!Um8xNG7Tdebpe$CAxtclUH4DPQ6b8VSLbE;%nO8ux^l?^-lUM%#hqfZ zG==y5w>6n+1R}T8PWoYH;UAldfTPEhI;tH|B~)SR#AuL|MJ8Tvj@NnZc$$Ju|7|Qr zjf@G#Qe4-_SiD(AW2QG)PnlX7E#Su`=I|_J8IJ*o!AhXpaUu#+yowDs=ZEXf1meM) z<32cU<}r`6QI?cfEV;pevye1mjAP6|b@f||Rnc!)24gc@H>hi9x*g_ilF4UnHzzw? zIA|b9S)q{R{$EvJnZylC8C$F_=V*9vc|HePH*BR$Q@_O--*+J$4)Q4gOjTu^xR}9M zLda8?cFkG%=hNFd0iQTKXmC7mbssWuAutF+Y8)|U3QBJ9;hLiN0%T&`=F-d{jlHs6 zUH|p<>L{dK5|{NXCZo3H$#~%Se-Y@~54RrK{@>x&{8ZPkPtt7E4MLcN4560y3ZP3G z5;$5cVxAw=H6hyKhEw%GN1hFlEmliOk03R=|IxwTKyHe=J*}iOrbPihGUm4FkSp0H z2Bmy-6VW_&m0AasKi7hu3r`VZrG+9r0uPtJC7)?K>WXRMo|&2cxarHk`kVgy^HvGB z0KmY2gv@1eOvTnwEqVJNsyXnm0lMH%jI0!THeCL5O6L^hm1=BKgU8Y^EaK{od8$3N z0JWAzrB>%-%YZnI0b1;3qa4>gyewNh@sLAi4U1wJ;8s3kDNmsRlEg~j!pbKcPM?zUmcExMDfl9u@6u_E##`GDW$Z?$_ngzW_Q|94VjNjck zi@@hKNA3bRdPC55pjEu)!oCddBR-YBxQ$MY^L>hL5J#7Bj~O5jq;i@d&IOR4IEjKi z&r&gNl7FkuvBrYj2lO#Z9$r?Krc5CR{++_%=zCA5Zo}x3BV}3>_4zJ7C=u39UE9JU za`H@AWNBvY>v<|8IZ)O;l6zDKX#xN~A&$f;m|fouf*xW}3sR|OvNd3de>n$3W8B1V zbnaLW%d^O~_*H^O)G?FwYo~gORjfp9uf-hTyk*(SGM_;{D+Ahqsj7GbwgAfqHZm)+ zGSJ^QO*pH6KstSq4O+dcm@Q`5Yf~@6BE^jC0-5~jWVYd@Hk#t_BjE1i7h8ygzkYG#*b2sRNT`_Lal`|9BK?zJ>OMBcWn37X5URa6Ek7sqkYBPX42VKK@I^<(MigOk9v25E;uY+M?VdLQ9;lmL~6agU-F$pP|FySJ|MN&{w zQH!DxErwRCIPnrB(n*?Z|2vILlBF=SNR=jChEXzQ$!29^=j7t%kt3H^9-n*#3i$;T zDHaq`qEwl36)II3ty+y*b%B{@z9n{=V}(HvSmtMjEwI%Gw)vF9jwH)xJeFo`!k2u- zeLm-*3^Q{JODk&|TRRexQVJ9*Qmlldj(Oh+?>VmD1rFp^Wri7UgmNQQs8preC^beK zqt;mCjE^3oV&W2#QqnTAa`Fm_N_h|!RWLXlV^mB|%Km0F{vt)r`_Z(wL-Y+`C=ZeeL*^f8f$Yn6r^hj=Rv#Vm8fi_XD2@kED$rI-AjHJIiEVZ%#jjrfQvnu zrjtA^1L9IA3zPK{nV9P>keOI!?U8kA=Th|S8CKbbLPN7n<#u7Q8GA{4o4U61Ajh-O zSFU-^`hD6dL0V6!I(d-l5|L&ABbdTu*6KSDt)=T$X67XpiDi4;ZK}r8gv|)1Ba^uR z`0m+Fbb%w8(Kw-}Cqjo=c&c!@xI5-HRGRdukOnqx7e*sD3A>&dDpTwxNaIfH@ZRcj z)4MzB8V6z6Y&K|~kp{f!+N@Ir7jsuyT&a)-F76iY6flDYQXvg&%u!)8xxuFE^bIb( zQ4jJy09T93jzG|o^1~1q+G8C@0KxBnlb~lpVGXmK_Qj9qqse7}!yWiSn=`F^4s$us#6Mcu_;pho0{r bkH82T%!~T~dOL3iZSfI!+IWoKhyte*`46Vs literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.ttf b/katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..728ce7a1e2cb689df32c3a6c26e1bd072dcf2acb GIT binary patch literal 31196 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 T)YS6}E-Q5R&CfXgJ?`xQe`ny2 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff b/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..0ae390d74c9f665cf8b1e5ea5483395da7513444 GIT binary patch literal 18668 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�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 J00IC101u*7EU^Fp literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3 GIT binary patch literal 16400 zcmV+rK<~eIPew8T0RR9106-7`4gdfE0D43K06(+<0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.ttf b/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d559b4e937ca1b805eb39f544cbebe3c58ca6f GIT binary patch literal 31308 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 G#ECDig^RoZ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.woff b/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..eb5159d4c1ca83fb92b3190223698427df0e010c GIT binary patch literal 18748 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff b/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..8d47c02d9408d34b2a9d566c0fe0d42bf82fb735 GIT binary patch literal 14408 zcmY*<1yEg2%`|MLIM|9?_aV`2pW81BEMnqM%M+)C^+b1-oR z02t-J_%;9l4AF0pG{Vf&odf{j(EgI~enA%k0e9Kb*~$R`_y!38Kz9KE$cU!j-uM!YNulfxf+y*_R&O*K+_*|A8iuH^jlj`-`Vj{^Cjg z1K2m@UyddY7GG;l`LfFf03hSc0MQOVBk-*T0l>FVHohd{)5|V?PooV<^uA$cod_o_1%ml;qh4G2{qm)r+>18OHin z>I_cWlI29|Ww~f#6k@VGQAf*1f6x4m<0g4C0m~CIL?g-|3-jUt9a-?oZMVb?mA6l= zB*hqm9E3oMXThfvL!xZ<{?1SWODlT~d`nI!5W~e(O<|=W*SfLn?R)61-Ed;kub{#zCPDO&r0C}-^Lf=g%M5I*&~Aqd3~kFIepCGuh1H@ zEA^?&JD=V{#c5QWoo&W_HlFSNmhBj|{1P3qUB_}}nW|o$g@E&!1et<8B-v@|-)dU{ z@P@&yCMueBg+%HXpDG6OY?>pZ1BxS4F4NUdxmA z<-OC>-hj*0wEmApyLpsS^_NG7aw|AcC!Zc|3J6m#ri~=37p+jXkVd2NGLNpea)HbP zF2y10%(iN!Oe>H*$d_>~6UjuEprjF9Wkwy7&CME;CG56ef7HbZp%jvYWk|^oJ%YwK z^>k7P9e6EFfkjbQsUP8g+%Rdy;R0c^g% z4i*{XiL@CsfxOCs7r$N6u6t+Fv};pSDVr%Qy+#KIGx$wIJ|5E`0awk+Rh8kG!iP?Z zY28d*Wh!Eo+>E5?mO=9;D;OQh2yN`PlZ+UWL)<2-I;BOCwixT=}?hl%~{j(w+vs zWWWqu%QF}qQ|$azLP)kJ4SJd~ADV%E0p~)WRSqVsQTb=%qII+#+xcT}N0C{ogRIh$ z%z%7$7PbCvP%1DQOn}-mu+_C?`I${=lXa;wG8@K=Fbly4J<9UW#)S8P4v5*w>K!iA z=a(|-Ak;K*bBVH?A;&NhlvTf{eoQn62;aG#EMh%qD>Qj2mw3W}kkJ#x_7xge)uadw zgY1$6&``g=9BjgB*0qUh$R#z{skq^462>9A!C!@%#%C9xeQ_Sex;=Q4PH1|fQCvl+ z*=#x~KAqi6nqkyTDGc)idSSyUx*=FGWA)!JH+kkViDm>GWb*FNc|m?IT)9aNF_#K9 zjOC7#CpnI$N<*8LfnXgit#7%wsxEwOmSloCge5eQn93~!V&ivlLgrqXI3E#A>knI} z8$)WX1Ut^c*2cR09Faq6<-^5nOmgBIaQYGrgHhZB+h@&Q80yW}$VhpeW3hktPXCR7 z!tTVF;x>6+{$z4nr$eIzTHeMy9BpE$3tMx4SL-^0=}YZ6437ogK7K<>`!x983HsOr zWkXAb*wrHCVJDpOzYU8K07)YyH^I&7b}vvThVPby;c~F2w`g**GPvr-e^x-|Au4Yj&>~XUR~y#!P7B{ZeidFJ>@*^(Ea@k%zvPiIrH9A z@!M8$anuOj97k#0b5wz6a<26~n%xVO<{k>`m$%^Iy?GHaT*(GAvGe+i!ZVCrZ`odC zg>03Dd{^f$Zgg)QOO5tv-5(w`K@UP9v>fMSnJGu9eApaS|F()vT8Zg3Lrv*W`f0>d zBIf}|<#G2lkCszrlNjx9^9=Fg-bdv>|IPel7`*R zkD}hLr33lZ;*B9yoA}@a!&riiN!Sqe2{O>_On2da`HSx2^tc(ZgTZ=|;_`>I2uV)} zm69Q{`D3Hr#O+?o{Y)r}`FxiOgb$LOrjscq-3@YDRZqA#&|z4Z@>29z!sS38(BZ?P zz+k#;ud}SYY;#dA_2lC9AQ@h)Zf%N&P7?v< zXUT^9bQ!I~tQcv|u1m`AZNTl}9O%i~T9A28Ns?j7d8Djh>2W_pQ9X>_@`)aLswCgS657RpC z4hUtxHM$^=W=RI9CTA4<{p-Kt`I-0C?aYVnN zDyUPQ&~SHw*8X6mn@EZNwBj`IgpOMITZ#4O6Q-W}Zr}VxpViG?aiDDOK(HiNmX$R<^dD-+3}PDh2dtgkVCa^ZnoC2d zouT$hNoa%Y_w0n{z+$5j=+V;W_E4Y>?CE9Dh8(*;Iy#wIKD`l}-(25gHct3jLnHsR zzW(pXp3*D0`f^yi_)5>;uwD`|dLKoJ>1WlFVg(82*5D{`eg@lFR zVE{D)CWS_?Km?27(1<)H?quI=WUI*ETe)Zh+19bz$1jv_ur@e4koXT`<4%`M+!Hr( zXX@e=U1nlVYk0C`24P=P&RY_WMyDQ`zKpaTnaVr+tXW)qlnInOZRQ%;euIYI!=FCD zPG(<%Iug14aAbs~lW2~#X>Y-zN9S6#@_`qx&3SPaFF}{4@G)=ndnEO*GyEn)x}>Z$ z5CJG5OM=;3Ne>!YRN+GNYPUaWs$mFMsQWz=`?k|}0|f@#TF~MegR}UN|z$MaJtG#piC?BeE&jt zL{R1gA~WunjsG3Ic2@WrUz3ICMUAHt>S@NIov~J5Z)Mx9LU$ajt;Er6=2!K8YPP6C z75|3ZjUS+jtGNjKn_3b=UlIWo;%!&7ZNDQTtn?t~Qz50e6~x`LGGNHulr^!sV1JKQ zGj(xt{`mw^$Em_Gb#}!pmf(Mmf3Qk_D<6+J|Ag{r)ELO>-803@i$)+^30d%LtI;b= zu5LiM_ZWcKvI^8SsH)*-wiLWBWYe?-`!QNwXoVQDs>)4QNOC);B9bU#;FzRH!G7A^{om8x+kpVy8iqw3HAQ*NZp&4>}f~ zg23@JKlq*opW#RP1Ewi|li_ycJi`^s!@0;Ki8!O{)55QVCmBK3=qXW^2!IOF%xv+H zZSC7)35nWd&fndo1I((dg5W-bLp#diZ(XL%>lv1;qYmvX%9f3Be1?%>q5}nt@6qNM zZJOBwj60+U+o`+I2))k+;ni05S+G6LPS-JSQr`~GEbSV9_e);Lt}eB*qDxI;`rq*< zKz6WHfGe9lj{JTGOcAeg&mp2U;clx;oV_1hdScnsU%I;$BVQvy5gMQ)%Uc{Lk8e|~R+o@>BL-d9KCZ)LUM$=-W8hGgq}!5<5q7^SZMhknPLfzc zl9~dnfd=)nZI63(aT8gJphj zR^VY2Ot2hW1u>OGXNRGvEVYFE!o%NcBF)(SVR+z{sYTcU4FPKCnpT_jP+2fx&DO#D z`lJ1%5u)T9!tYp0?)X+jl)z6bW?P6 z*@5Er)Yr$X<{*k#SxRVFYA=IGILZ4^`pZC}^KL8YV&FINFwyXiyQOaLY~5Nge7q41 zSjSH^6ZX@qbF*VXsXuIv??bWsibNN4{6}iq@H;BUH4@8;CRi0(lmrRM@;149Iq#qc zlz{n}H3R--kKG_aH9>z+kjGke>*gUTbupUFuUkJ-4fRE%G&#%%E5SgM!@@)0w1I!x zJ`*v<^l8#FpEToj4hCwxYwR**<6N}GtVCEoD{i&yv&dSf!*mJBF)!!D+b?_KMARc9 zsr?7ywcb5Du7AuGoTK%q4wMY=1T>(RHbFW|2N|r>gY+r=vc6~6>bn_5X_Q@6h?@YQ z8?wv2wfg~l37(P2Ai3hiS@O$|msbkx@Fi@{hhS7PbTbjiNrk%%b{uZhLs%PSA|l=c za}=nhHXH5k=fx$gMJ?fB;CyiY;ah}zM*z&fgIEL~3kkXc9xNgy0=X$^@$EY``XZUi zr};e=4-@>PA2suXte_%LvTT;2{U>+=7fg@n1PlG)v2IUglANZ2!`%-o%x`Erh-_Dd z_@nTi-ciuI?Xe-SOAj?tZlymKoQ?nLp4#kKN)Z-vd4=L(z5j&e@~U0{qev6LR5HVf z4_oVfbtl+cE?qS+NoCYh05X{wyuRa$_)}iSexB#!@y>lT)|!Gi)zQyR^?Pcp$y8#) ze&Valo?s!7)<=&uXjH9E?uuOeP&dFZ2;~=A$PZT!JQ&U^um~l$hgy9OhJs!GBOmRo z#`lJA-i*QoUqNDVI;J$+3iUIdHh?T}|AHhjiibJQq* zam6z@$qb_zA)H z#d4ks>+D*(tqXnB;3lNVIO=Ex+1BR6{RsT-MtkaFROX9|6ROw-xl~U$cMK15aWxi< zUk*BZWmy9=x*k<78s=?s2V-f*Otz4(j&97aN22dmZhu z{$m<{uc3;^Ee7enKYt(eF({)d1f(Y~^MhW zI#IMY`~T(=s@6u#k)ZbW?cCKW%<@%t!)tGWAwLq$Q_8JEb|-S`8;`;tZCN5im}S@I zu5r1QN`a15c0YH=Th}6PP0I4y;aJYju3bqG zxv^U`aK}YJ#0lJ9&>Uf}|3xH$%CcvMjB?^!`EKw$JW;@4&iKt2oPd_KSDy54h6Bep zZZ}H!Yh!|00^(Mgx`SfVB%Kz2+eWqojXID6*ARVM!p94Bd0xGx0nAK09A zQdkrhaV@(0Ar>>byERZMS4#3WmKH+bO8kiX{h=0S64Kote`StI_wCw&rlf);tY$lH zC{IkK&Kw8-ZJZ0%K-5}B1WRMwbpb@)aD0G3lT?vLoiCJB_YU^vk9g?iGH9A?hp0xm zz=IsJKt9oQ^MuogcwdWEgIVX0l&GMceMP!Ebz?I)FYORVsfeg1AToX|C@``1IUC4N z@0nAd_hJJ(4_oDT!ZKJ8Y#o#TeJCk#N|o3;s5)=7g!J<;xGN)Ko_e*H(Bx--%SmvX zPE9L?`?X;G=H8GmjKT_i=D`!acldszNlydrpHEJQzt1IALtv!a6{cF_BZ}u z<;WT1p+zyMLD=hFz8bAjXsgPSLdaaV#avYJ#TulFOtGl4aDfgPkQJgy(Nbx4MO z*p@UyV6dMe!fUVH&kug#cUn#bghMNzIPQlQyr6Zbq6dXmx%T;yxn1!;fV%s4^p3p zYX89N8!|-}dU_{bcbbtB3|rhWCuNL95v7Ye!2P&rUIGHg$^HVPvrH<-#;$@c+<9>2 zqb`+76J~EOrtf5jBZE%pdbgR66490ZlA$(d{YhPr7Uy$l{nIdm5INq05pV+c*qiiY z8>NlEO>Clnm;kqT8ncq=NHmA7R$|{mD%yWwx=oRPA+ripG*b#%&*x&w?kkwjM2;u@ zX3330xr5pZAx|*}Ma5rMCG*X6(jpbl)H&3C<`g3rq}&*?Z9j5v%4IKQRSh%4(+LOc zi>)Yun2T8uC z$iZ^)ZcvG1EKgu571qV>3R+nSBb~P%`_cKYT{D)88rA9}11Vib%Tp0wdlb)Dd^SxW zepnc7B%~FFR3=B3QF9!4V>nQ2O( zzb*+4+dSB=r)>A4_CP(!;m`+(rxL3)oH;ADmzd_s9Zmnz(hIF7k0pCn6rkSH7)?NF09%f9Dy61n&utP8ZZmjtZCDK1rD|-c?Y7N>}@S&$I=9D{hq-5<@P(?MO%6< z8AOo{L6#SxO$6lqHU|CYx({cGf&Yxu?pxN9X5~L0cqA1d2?q3(IzCeCBGP{F@~OU1 z2i_BtO7m-4!g@_ZRzvrL=Mbjf&MiD@!kFE_kvWvAbs5A99=NwlB93-)ziXVNWg6}c zCzk8qSQ@3c+WcwMJ{C9mW1Q_3JT6*POG6kF{coyA1VW^xOp44`tCWKDI|K`66Onf< zp#+54ZwS2Lh!bl}wj$5N<@usBF2QTCc$|Q1vFOm$u|&G)L9JAmqxIOp&l`M8D(JqG zzpx>?hQ=gB@TX^0IdIXvU8?=%0`ab_c8fHMy?s_y*l&1Lc=jJ0sbNbRgD}(;2=AsD# zdNbFGwy&rY4`K)#@Jt_qX%KAD=@uiN;p z-y$a`saleu+Rvvj19W1_f6aPP&pna&Zeb!*rSRs#HfWZ{obzk5(KC*B%Gx@Cn;?-g zsoUcx`PX+(hqTQ{&Q90wXl=cVqpIh9gB`Ez=Lx-|wqa9bgPsM7tV#+~WR9UMZVEL* zgGlMm#A3~LS2hXS%(bcNokBT@M>0Z}K3H_SUI`!$sfGf~A$HhJD$E870gh_9u|xK+ z@-r$-8K{T{;&a6QZ`KJQ-_&Wx ziP!3+&(sZK0es|BVIPx)#Od)V=z0sJpXrugcPWvt?2eMc(o$r}!RSoy!MDcOvx<0~ z%2=}J<*-s+P**`2TcZxF{$&bBrE>9YXg=J2+enC;v)DAuCOElu5K0R-U4jOu&W<{^ zG3thrqqAiBs`NAHG-$H0! zI-4%%0}eX(x9#vPPc7*4ZEMfKF3g4tWjUASaSYaNJK4<})Pox21q*s9r)>1MF759K z>x$kV?TB`9mESJs`be5HIC~O@7PVeBlQJ0oHON0&)2VPmKb+rm&)ukH>Azsw>(2b;-o|!6@Hv6!wss+L2(JHz$%XYV2Q7ryXO+U$|>H%s;YZinY>T;e*JS%`^4AuNFWHr z53#wsI-=`-H;Rma$Z763BsFWDDfIVlCyIJ^wn)9S&DdnO=~^Q7;BTowq_XTN;o?%g zuAW^=nTpB5FY0?_>7(~M`9Q#O_`5^z)z?Z8H$%1qpW?YRjIjTqa^{r)D)adc?6`AO%3F2+cD#IYK5~UB zGHAFi5vKU%pgC<}-2S%J4&lbl7wUf7;}WSLYSd*0jRO@kVp8aaI4Q4K zUvAZvW;UI<`)16)Sy7D5v&-OsHFl==h+gEv)otYC&5Wmt6&+{fbv`ROHb6kNGAozY)@7O4Vi>o6Q0hsax za`gMYrdRLXF=i2uRoX4knyO1dnD^+5_`=Zkv-zes*P5rP^{`Cy2Ne_HbiA-1YS!Yc zi<;4;pFCV42>qS2X?_Rqdf_xxb3XV%4F9b4n_wZ;h%WEquv=czxipY)$nj_IHYPS* z;JZ|4_EBcTnLfHIM0v$73Vces?SPZbnIT+y+7V1s$6Pcut ztC^^6Gt>$(`4+~csRIQD0@2LwfMF!0&OsiR0K&NbbAP=XK%FhgjKIQ7GCy%O9LBRU zkoc<*lQr$+gRW?Use$6tJ(0S}=&IhH=X3x?X^8Uz((X>0yE*QZG>1{kesV@pfFtzv zrOYAhRSr;u+XsHv(8n(uxH;0y^F2(l7|+6U@hdmI_29?@BOy9z+n<1kXuRo%zpJq3 zxp_!PXkegE`;{_>?kIDGvvL`QZRALclm3Y#T_=q)ZwfXs(FDr` z7ClwUS8AXnuPFo=WQdqw9jq&w1ET^jc}bx`AG+9G&fkFI|4wNs2kp--L92b2TDyU z@SLBK;ypV)=|>_znr6?tdNhK>gsVPEy>INc-?CjcCy^ns3ZlkI9VQ(_#pj5o9 zA%=4!_Dxk%3jBU!T*fc%9ijU4J_2tYR#V#;mBkGDQ&x?T(ztPfjydRrvf{Wu^ZP+= z&6fmEjQlZ%wfk5(jOn0Wk3bU*=1f~R#9@g+^s1K{$CG+J=pyA zf57e2SU|9&DKtbv>F6x1KYF*x&Ab42DKrS76naN49r(8VVKBx+`^4=F(NArR7zs-~ z)W_2v@4Ibh*qTijR|JYaD~oXI1$TQg{%je4E17GN<@?((V=D%L0~wiZ5>_*L}P7=BjN=@Qt^XT-jk`HkKBL!43OM7^oTT8hSLimAQ4XQ z_BXzH8{UxBJao-*U>Zp&>sOxZ18@du?EBMXAC1nCt+TFfTFB!zx!>TeiG!D-C_tvY`+00w442Mq~QsZ0Xt2f8;i6MOu_0py0tz2P# zFHR26qy;eD+bonjayy_O5g^0Me_siBf$J8 zIr6l1OwWrZMvn*aVh7uwIQ-pdJ5us)u`xbMd4{MQkB09e$e>;_PmTVIM_>CPB$Uyz zP`EpKE`Nk|LRPv$YUt#hy=WEm9qV|3<$wqAVc6^p@Uhk3(uu(+bb#O%@G}lX+M-+I zDwT44nx-CQ^l~pFeoh0Mp-_J7(JJX1<7+k)Uv43Yg=gbW%(W%)uuSMs~ zlL9{VNT;yvThfr8`5J<7<4-Qs@q_RgEldzL{`Ua{A!XFsv^IJ&T4_Q>(ZWGAU&OFN zCX1Qn{e?*MK3A1Oa#Iz^6H@}sXct0MV*=@>RvZvY4&BSvH;4x)KWkSLEyH6fx}7toS!oDgGvtHg zz47p(J!Lo>Z6AA|faAufx=x^?vOc!Jvl@czxVmC+&gXG7BOQdD44OPR2vE);toL$g zHZ>yrozrXS+Tis5Qez?1gwS9ez}x#Etaim4xOu`!-z!d;u6NEU^%2xDnV_@j=$R{W zILsEx8vl@+_^9}BZ~!5lP@;N&os0ar;s@9bFYwnAUV%p8>n(|UUFX!aVK_tN?$t8! z$41|A+&Q92HwH&(6sukwP*R2!42!(&J$YP_ZdbVW*BC#U_vJ%3J+B?t<$Jh3i_;zO z`BVV$`tE-od}_sgqELZ8_y4DM)DPeefcmPA1OULlfCGsA>Pe8l>N)?1&;bA2GysKQ zl3=6YV&EGPun^o3))32($dEjcdXWB*g^-U>EKo5}yU<+FG0=xFbTDx+x3ILZwy;^S z&v3?Y&G7K>>hKBhX9%na0SIFVmx#28A&8Ag#7OQ)9Z1i}HppWrOekI`ohZ*h7vM4~ zEvg@CHR>iBA{rwa2yF@-3*8*O0{sIc6k`Sx57QNM4D%98533q$7n>0~2)hdh4aX9v z1?L0T5Vs!>15XVv?yD{0!{C3zSHt(gZ^qvvz#`x#up&qy7$yV|iV%7d_7I^EX%Vdw zV-hAyeNDVqAZR4$!hB{=2qBeGVg z{$!ipoqoR;yvTYMxf>ff;(bcbuZe=djyTVo_=;ogfOZ^nN&qGpz z*EwAJI}D@T6JR5OlHApbAhiSaUv6%uaT6gcT%DGq_Cgo}`$GF2LQi-Z0Du*rN|E*oCs8yy;O z3|&X}FjDtpUTd1L>%#9ml#Dh!=~^=%S+(lnmGxDmh#M4IvyQ6Mb`vMvO2LCkSiH7o zCTD8YKmW|KSQBp6Yp>x}<6RQw6}$6U6v}f(nf?(%ZQz5yc6C%sv zmBDAO{Ogdx1(Lh%;71Wy3)1Z=RIOo{B@SeWjQviXWB&4uN|%Wh=;08*YqZkOsepK| zV3H1QyK6))5TdBOp8yp4t^K#1gVbz;R(kzXA7fYWvp&J zon0RXZ6%#eRJ3!BF_>0FeN5_IACtF1sh7SEghXG8gDqSfwkJ?{HsvT65(**on^4Q9?z2 z$FdlKBNQb7R|GmBD^_s%1*%#*L87?qD+jvPRc+e8I(f1c+a&g6ozl~xCi`wFQBiZ? zC4$gB`x0C|xN!GsU0y^BsX`L$pW*&Wd2et-EAk1N$-tjgPfjS3-pg=+k=m%fE6n9M zE>beehtbIG$`xv#;6x;PR#u3Uxo+mfC(l8lNEL&~lO(6YuU{uKBhrBuJ00KHlu0vD zDN_USKkYJ6B5UwWs#cLVm81G^sct53(`0WMoGOd@=G0{p4+v9Jv^O{{Q2M=@(NdI9vd=uhY+=DHz?of)JzY&4XE7@h;(jLMiog*xG7Zb*^;jz79?AG) z?LbtVf$f;l!V&-Z5f*QeeO;eL=Fjjc{-mvlE|?ZX<SUob}|T5{pe>O024 z-&{7=JTBr5kyP**_>x9=gE90!ykKUULzYA@AHwD!loe4dA%TNYiY> z))DKArVW>XkvZqRsvSYzsZvE zfGFgo(Lnzq1+B7=#lICyN$j6=zETKGNqn!H-vgJ{%Q|%>{TW$ukQ2pR`k=6~U$j1) zn!^Z{%o1xl?bMglBtLhb;(n|`U#DKWQJLIp&_HF#ezD;wL-f3Wo_cK9Df$uOhUHp2 zY$q%FU1xm=e|3x13!FGDRFc(B{dlt`x8X8fue9niyk1MfIvn9a1C9&h+bYY#2%BWy zH;>{7PUkc-{)nupBlQvgu)(>>yt`mo?a+vPuV^BcU2NI!``uJ1Q zq7&v+viB&1uQ-?e28t!Bl$krJY&PVaJecX3@7NBR zNeA7mw{J+kAIJiqGdz3S=)Tub0#9-9sSg&J^yPGKuXn9tLBH-<(rv4Mrxv>fRsLY> zWjb3WHj@XF@?JH)-t2b#u zOwx#{_LXHR@`l*WNSrPhaWl488-AFDrlm`BtsV8}9j#!)y}@kh6hgKD4twOV4L@u< zAb)^9;VZ}JL!ux_uwjFMNTvbiK7YcCv&q8@&_vLbI0)A}#FXOTe5{2WpnxBsux`G5 zUi7j=q5!JZfcO995vIn*+vYT;#+JtBJCF_7U@T#iV ztDHfsrxazPAJdZM{>^Wmd})I5TnFzIUt8v(k|2R#VbOCWvF+4au7>_}W{P53Jt8_o z)tjFK=3A!n{ z080H|vv)ct*eT?EQ&*>kBaN%f{>gDAac)VesX6uz7LLZ&R6QG1>ZKfnZrdoyLT|4t zFh^YuRSIe=<9*T(ifa3N1rVPul1997;j$m1ckOp3NP2_E^gb13=7*r8-l-xVE4kh?Q7}=?1J$pU-iQ%RXP|qLOUmF?a zBl-|KJK!YK9Dij-{9%zI=b|BT@FtqtrQ21L{IIFPSyN7~IvNp6({|E1_k7OLXTRh% zNbL>`MYs9CWZiq!zTZrg!WaOUd5jgXTN^pITx&Tac+cAM`01ZKkvtFOs|4BhjlO-7 zE;O<%y)CRLr75N=t1GmC@3P~l2ZqRZzn(hB_plw?(DxwLYx8xxP)YE0x6-NSb*I!Q z@O7^?Dd?k8xm>mxulaP|Zl+8JqYFG(g(z#0D6hFF=f0>QhUjbwW9NhYn#^VuJJa93zFB}g zK5nL%wUwOa)KTo?xhc{4@gBsB{cEoCAtSu!n2G6y#sVHrtN9yc4cP&^L_ dc`{EPH+n(;EE=F?jkox}V1NO@K0g5{{|8v1?6Uv> literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cfaa3bda59246b49e94298478d6de3b3208066c8 GIT binary patch literal 12216 zcmV;pFGtXKPew8T0RR91057-z4gdfE0AMHp054wv0RR9100000000000000000000 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 G>;nKVNojrn literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.ttf b/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d5850df98ec19de2eee9ff922ef59586efe471d0 GIT binary patch literal 22364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.woff b/katex/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..7e02df963621a5e26d53d510f0b4992eebde1c60 GIT binary patch literal 14112 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 ZM6wWJ659DkbG}7@mjJD1@jO-Eqc8pH1xbNXy>V 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff b/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..31b84829b42edae20d0148eeec0d922dad2108c4 GIT binary patch literal 12316 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 DqysK0 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/katex/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a90eea85f6f7bded69ff5d40114447a6d8b48cfe GIT binary patch literal 10344 zcmV-uD3{lFPew8T0RR9104Qhx4gdfE08C&204NXu0RR9100000000000000000000 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 GG{*pT{>~Tx literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.ttf b/katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd679bf374af72f2a183b97b40c9c7e9e51fbe5e GIT binary patch literal 16648 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.woff b/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7da821eee0dd05a0a6f0b16c2c1345dc573a84 GIT binary patch literal 10588 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.ttf b/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..871fd7d19d8658f64d8696ed9cdfc82c821ed76d GIT binary patch literal 12228 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.woff2 b/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c5a8462fbfe2c39a7c1857b9e296e62500a8a8a5 GIT binary patch literal 5468 zcmV-i6{G5RPew8T0RR9102N#S4gdfE059|a02KrP0RR9100000000000000000000 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 a^|k5z`r34UeQg~YeP3G~_EX$#+W!Ytlnjvo literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff b/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d241d9be2d317f7b39b401d96c8b18836acea0fa GIT binary patch literal 6188 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff2 b/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1bccfe2403a4ed770c1697ae7c15b9e1cd9bc4e GIT binary patch literal 5208 zcmV-e6sPNVPew8T0RR9102EjN4gdfE04)>%02BcL0RR9100000000000000000000 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 CPy?p` literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size3-Regular.woff b/katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e6e9b658dcf1cd031ac82b6b8f312444c55d4fc0 GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.ttf b/katex/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74f08921f00f71f413ca42c9d1c90202e672ef38 GIT binary patch literal 10364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.woff b/katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e1ec5457664f438ce5a1cc6dd8409bf60ca7804b GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.ttf b/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c83252c5714c71a3e0ec62195884167339a0129b GIT binary patch literal 27556 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 MzaRX}iWL5T03x1QQ2+n{ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.woff b/katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2432419f28936aff53ddfa2a732d027e6a6648fd GIT binary patch literal 16028 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 G0ssIW .newline { + display: block; +} +.katex .base { + position: relative; + display: inline-block; + white-space: nowrap; + width: -webkit-min-content; + width: -moz-min-content; + width: min-content; +} +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: bold; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.katex .vbox { + display: inline-flex; + flex-direction: column; + align-items: baseline; +} +.katex .hbox { + display: inline-flex; + flex-direction: row; + width: 100%; +} +.katex .thinbox { + display: inline-flex; + flex-direction: row; + width: 0; + max-width: 0; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .mfrac .frac-line, +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline, +.katex .hdashline, +.katex .rule { + min-height: 1px; +} +.katex .mspace { + display: inline-block; +} +.katex .llap, +.katex .rlap, +.katex .clap { + width: 0; + position: relative; +} +.katex .llap > .inner, +.katex .rlap > .inner, +.katex .clap > .inner { + position: absolute; +} +.katex .llap > .fix, +.katex .rlap > .fix, +.katex .clap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .rlap > .inner, +.katex .clap > .inner { + left: 0; +} +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} +.katex .rule { + display: inline-block; + border: solid 0; + position: relative; +} +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline { + display: inline-block; + width: 100%; + border-bottom-style: dashed; +} +.katex .sqrt > .root { + /* These values are taken from the definition of `\r@@t`, + `\mkern 5mu` and `\mkern -10mu`. */ + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .sizing.reset-size1.size1, +.katex .fontsize-ensurer.reset-size1.size1 { + font-size: 1em; +} +.katex .sizing.reset-size1.size2, +.katex .fontsize-ensurer.reset-size1.size2 { + font-size: 1.2em; +} +.katex .sizing.reset-size1.size3, +.katex .fontsize-ensurer.reset-size1.size3 { + font-size: 1.4em; +} +.katex .sizing.reset-size1.size4, +.katex .fontsize-ensurer.reset-size1.size4 { + font-size: 1.6em; +} +.katex .sizing.reset-size1.size5, +.katex .fontsize-ensurer.reset-size1.size5 { + font-size: 1.8em; +} +.katex .sizing.reset-size1.size6, +.katex .fontsize-ensurer.reset-size1.size6 { + font-size: 2em; +} +.katex .sizing.reset-size1.size7, +.katex .fontsize-ensurer.reset-size1.size7 { + font-size: 2.4em; +} +.katex .sizing.reset-size1.size8, +.katex .fontsize-ensurer.reset-size1.size8 { + font-size: 2.88em; +} +.katex .sizing.reset-size1.size9, +.katex .fontsize-ensurer.reset-size1.size9 { + font-size: 3.456em; +} +.katex .sizing.reset-size1.size10, +.katex .fontsize-ensurer.reset-size1.size10 { + font-size: 4.148em; +} +.katex .sizing.reset-size1.size11, +.katex .fontsize-ensurer.reset-size1.size11 { + font-size: 4.976em; +} +.katex .sizing.reset-size2.size1, +.katex .fontsize-ensurer.reset-size2.size1 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size2.size2, +.katex .fontsize-ensurer.reset-size2.size2 { + font-size: 1em; +} +.katex .sizing.reset-size2.size3, +.katex .fontsize-ensurer.reset-size2.size3 { + font-size: 1.16666667em; +} +.katex .sizing.reset-size2.size4, +.katex .fontsize-ensurer.reset-size2.size4 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size2.size5, +.katex .fontsize-ensurer.reset-size2.size5 { + font-size: 1.5em; +} +.katex .sizing.reset-size2.size6, +.katex .fontsize-ensurer.reset-size2.size6 { + font-size: 1.66666667em; +} +.katex .sizing.reset-size2.size7, +.katex .fontsize-ensurer.reset-size2.size7 { + font-size: 2em; +} +.katex .sizing.reset-size2.size8, +.katex .fontsize-ensurer.reset-size2.size8 { + font-size: 2.4em; +} +.katex .sizing.reset-size2.size9, +.katex .fontsize-ensurer.reset-size2.size9 { + font-size: 2.88em; +} +.katex .sizing.reset-size2.size10, +.katex .fontsize-ensurer.reset-size2.size10 { + font-size: 3.45666667em; +} +.katex .sizing.reset-size2.size11, +.katex .fontsize-ensurer.reset-size2.size11 { + font-size: 4.14666667em; +} +.katex .sizing.reset-size3.size1, +.katex .fontsize-ensurer.reset-size3.size1 { + font-size: 0.71428571em; +} +.katex .sizing.reset-size3.size2, +.katex .fontsize-ensurer.reset-size3.size2 { + font-size: 0.85714286em; +} +.katex .sizing.reset-size3.size3, +.katex .fontsize-ensurer.reset-size3.size3 { + font-size: 1em; +} +.katex .sizing.reset-size3.size4, +.katex .fontsize-ensurer.reset-size3.size4 { + font-size: 1.14285714em; +} +.katex .sizing.reset-size3.size5, +.katex .fontsize-ensurer.reset-size3.size5 { + font-size: 1.28571429em; +} +.katex .sizing.reset-size3.size6, +.katex .fontsize-ensurer.reset-size3.size6 { + font-size: 1.42857143em; +} +.katex .sizing.reset-size3.size7, +.katex .fontsize-ensurer.reset-size3.size7 { + font-size: 1.71428571em; +} +.katex .sizing.reset-size3.size8, +.katex .fontsize-ensurer.reset-size3.size8 { + font-size: 2.05714286em; +} +.katex .sizing.reset-size3.size9, +.katex .fontsize-ensurer.reset-size3.size9 { + font-size: 2.46857143em; +} +.katex .sizing.reset-size3.size10, +.katex .fontsize-ensurer.reset-size3.size10 { + font-size: 2.96285714em; +} +.katex .sizing.reset-size3.size11, +.katex .fontsize-ensurer.reset-size3.size11 { + font-size: 3.55428571em; +} +.katex .sizing.reset-size4.size1, +.katex .fontsize-ensurer.reset-size4.size1 { + font-size: 0.625em; +} +.katex .sizing.reset-size4.size2, +.katex .fontsize-ensurer.reset-size4.size2 { + font-size: 0.75em; +} +.katex .sizing.reset-size4.size3, +.katex .fontsize-ensurer.reset-size4.size3 { + font-size: 0.875em; +} +.katex .sizing.reset-size4.size4, +.katex .fontsize-ensurer.reset-size4.size4 { + font-size: 1em; +} +.katex .sizing.reset-size4.size5, +.katex .fontsize-ensurer.reset-size4.size5 { + font-size: 1.125em; +} +.katex .sizing.reset-size4.size6, +.katex .fontsize-ensurer.reset-size4.size6 { + font-size: 1.25em; +} +.katex .sizing.reset-size4.size7, +.katex .fontsize-ensurer.reset-size4.size7 { + font-size: 1.5em; +} +.katex .sizing.reset-size4.size8, +.katex .fontsize-ensurer.reset-size4.size8 { + font-size: 1.8em; +} +.katex .sizing.reset-size4.size9, +.katex .fontsize-ensurer.reset-size4.size9 { + font-size: 2.16em; +} +.katex .sizing.reset-size4.size10, +.katex .fontsize-ensurer.reset-size4.size10 { + font-size: 2.5925em; +} +.katex .sizing.reset-size4.size11, +.katex .fontsize-ensurer.reset-size4.size11 { + font-size: 3.11em; +} +.katex .sizing.reset-size5.size1, +.katex .fontsize-ensurer.reset-size5.size1 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size5.size2, +.katex .fontsize-ensurer.reset-size5.size2 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size5.size3, +.katex .fontsize-ensurer.reset-size5.size3 { + font-size: 0.77777778em; +} +.katex .sizing.reset-size5.size4, +.katex .fontsize-ensurer.reset-size5.size4 { + font-size: 0.88888889em; +} +.katex .sizing.reset-size5.size5, +.katex .fontsize-ensurer.reset-size5.size5 { + font-size: 1em; +} +.katex .sizing.reset-size5.size6, +.katex .fontsize-ensurer.reset-size5.size6 { + font-size: 1.11111111em; +} +.katex .sizing.reset-size5.size7, +.katex .fontsize-ensurer.reset-size5.size7 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size5.size8, +.katex .fontsize-ensurer.reset-size5.size8 { + font-size: 1.6em; +} +.katex .sizing.reset-size5.size9, +.katex .fontsize-ensurer.reset-size5.size9 { + font-size: 1.92em; +} +.katex .sizing.reset-size5.size10, +.katex .fontsize-ensurer.reset-size5.size10 { + font-size: 2.30444444em; +} +.katex .sizing.reset-size5.size11, +.katex .fontsize-ensurer.reset-size5.size11 { + font-size: 2.76444444em; +} +.katex .sizing.reset-size6.size1, +.katex .fontsize-ensurer.reset-size6.size1 { + font-size: 0.5em; +} +.katex .sizing.reset-size6.size2, +.katex .fontsize-ensurer.reset-size6.size2 { + font-size: 0.6em; +} +.katex .sizing.reset-size6.size3, +.katex .fontsize-ensurer.reset-size6.size3 { + font-size: 0.7em; +} +.katex .sizing.reset-size6.size4, +.katex .fontsize-ensurer.reset-size6.size4 { + font-size: 0.8em; +} +.katex .sizing.reset-size6.size5, +.katex .fontsize-ensurer.reset-size6.size5 { + font-size: 0.9em; +} +.katex .sizing.reset-size6.size6, +.katex .fontsize-ensurer.reset-size6.size6 { + font-size: 1em; +} +.katex .sizing.reset-size6.size7, +.katex .fontsize-ensurer.reset-size6.size7 { + font-size: 1.2em; +} +.katex .sizing.reset-size6.size8, +.katex .fontsize-ensurer.reset-size6.size8 { + font-size: 1.44em; +} +.katex .sizing.reset-size6.size9, +.katex .fontsize-ensurer.reset-size6.size9 { + font-size: 1.728em; +} +.katex .sizing.reset-size6.size10, +.katex .fontsize-ensurer.reset-size6.size10 { + font-size: 2.074em; +} +.katex .sizing.reset-size6.size11, +.katex .fontsize-ensurer.reset-size6.size11 { + font-size: 2.488em; +} +.katex .sizing.reset-size7.size1, +.katex .fontsize-ensurer.reset-size7.size1 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size7.size2, +.katex .fontsize-ensurer.reset-size7.size2 { + font-size: 0.5em; +} +.katex .sizing.reset-size7.size3, +.katex .fontsize-ensurer.reset-size7.size3 { + font-size: 0.58333333em; +} +.katex .sizing.reset-size7.size4, +.katex .fontsize-ensurer.reset-size7.size4 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size7.size5, +.katex .fontsize-ensurer.reset-size7.size5 { + font-size: 0.75em; +} +.katex .sizing.reset-size7.size6, +.katex .fontsize-ensurer.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size7.size7, +.katex .fontsize-ensurer.reset-size7.size7 { + font-size: 1em; +} +.katex .sizing.reset-size7.size8, +.katex .fontsize-ensurer.reset-size7.size8 { + font-size: 1.2em; +} +.katex .sizing.reset-size7.size9, +.katex .fontsize-ensurer.reset-size7.size9 { + font-size: 1.44em; +} +.katex .sizing.reset-size7.size10, +.katex .fontsize-ensurer.reset-size7.size10 { + font-size: 1.72833333em; +} +.katex .sizing.reset-size7.size11, +.katex .fontsize-ensurer.reset-size7.size11 { + font-size: 2.07333333em; +} +.katex .sizing.reset-size8.size1, +.katex .fontsize-ensurer.reset-size8.size1 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size8.size2, +.katex .fontsize-ensurer.reset-size8.size2 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size8.size3, +.katex .fontsize-ensurer.reset-size8.size3 { + font-size: 0.48611111em; +} +.katex .sizing.reset-size8.size4, +.katex .fontsize-ensurer.reset-size8.size4 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size8.size5, +.katex .fontsize-ensurer.reset-size8.size5 { + font-size: 0.625em; +} +.katex .sizing.reset-size8.size6, +.katex .fontsize-ensurer.reset-size8.size6 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size8.size7, +.katex .fontsize-ensurer.reset-size8.size7 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size8.size8, +.katex .fontsize-ensurer.reset-size8.size8 { + font-size: 1em; +} +.katex .sizing.reset-size8.size9, +.katex .fontsize-ensurer.reset-size8.size9 { + font-size: 1.2em; +} +.katex .sizing.reset-size8.size10, +.katex .fontsize-ensurer.reset-size8.size10 { + font-size: 1.44027778em; +} +.katex .sizing.reset-size8.size11, +.katex .fontsize-ensurer.reset-size8.size11 { + font-size: 1.72777778em; +} +.katex .sizing.reset-size9.size1, +.katex .fontsize-ensurer.reset-size9.size1 { + font-size: 0.28935185em; +} +.katex .sizing.reset-size9.size2, +.katex .fontsize-ensurer.reset-size9.size2 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size9.size3, +.katex .fontsize-ensurer.reset-size9.size3 { + font-size: 0.40509259em; +} +.katex .sizing.reset-size9.size4, +.katex .fontsize-ensurer.reset-size9.size4 { + font-size: 0.46296296em; +} +.katex .sizing.reset-size9.size5, +.katex .fontsize-ensurer.reset-size9.size5 { + font-size: 0.52083333em; +} +.katex .sizing.reset-size9.size6, +.katex .fontsize-ensurer.reset-size9.size6 { + font-size: 0.5787037em; +} +.katex .sizing.reset-size9.size7, +.katex .fontsize-ensurer.reset-size9.size7 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size9.size8, +.katex .fontsize-ensurer.reset-size9.size8 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size9.size9, +.katex .fontsize-ensurer.reset-size9.size9 { + font-size: 1em; +} +.katex .sizing.reset-size9.size10, +.katex .fontsize-ensurer.reset-size9.size10 { + font-size: 1.20023148em; +} +.katex .sizing.reset-size9.size11, +.katex .fontsize-ensurer.reset-size9.size11 { + font-size: 1.43981481em; +} +.katex .sizing.reset-size10.size1, +.katex .fontsize-ensurer.reset-size10.size1 { + font-size: 0.24108004em; +} +.katex .sizing.reset-size10.size2, +.katex .fontsize-ensurer.reset-size10.size2 { + font-size: 0.28929605em; +} +.katex .sizing.reset-size10.size3, +.katex .fontsize-ensurer.reset-size10.size3 { + font-size: 0.33751205em; +} +.katex .sizing.reset-size10.size4, +.katex .fontsize-ensurer.reset-size10.size4 { + font-size: 0.38572806em; +} +.katex .sizing.reset-size10.size5, +.katex .fontsize-ensurer.reset-size10.size5 { + font-size: 0.43394407em; +} +.katex .sizing.reset-size10.size6, +.katex .fontsize-ensurer.reset-size10.size6 { + font-size: 0.48216008em; +} +.katex .sizing.reset-size10.size7, +.katex .fontsize-ensurer.reset-size10.size7 { + font-size: 0.57859209em; +} +.katex .sizing.reset-size10.size8, +.katex .fontsize-ensurer.reset-size10.size8 { + font-size: 0.69431051em; +} +.katex .sizing.reset-size10.size9, +.katex .fontsize-ensurer.reset-size10.size9 { + font-size: 0.83317261em; +} +.katex .sizing.reset-size10.size10, +.katex .fontsize-ensurer.reset-size10.size10 { + font-size: 1em; +} +.katex .sizing.reset-size10.size11, +.katex .fontsize-ensurer.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .sizing.reset-size11.size1, +.katex .fontsize-ensurer.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .sizing.reset-size11.size2, +.katex .fontsize-ensurer.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .sizing.reset-size11.size3, +.katex .fontsize-ensurer.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .sizing.reset-size11.size4, +.katex .fontsize-ensurer.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .sizing.reset-size11.size5, +.katex .fontsize-ensurer.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .sizing.reset-size11.size6, +.katex .fontsize-ensurer.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .sizing.reset-size11.size7, +.katex .fontsize-ensurer.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .sizing.reset-size11.size8, +.katex .fontsize-ensurer.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .sizing.reset-size11.size9, +.katex .fontsize-ensurer.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .sizing.reset-size11.size10, +.katex .fontsize-ensurer.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .sizing.reset-size11.size11, +.katex .fontsize-ensurer.reset-size11.size11 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .delimcenter { + position: relative; +} +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .op-limits > .vlist-t { + text-align: center; +} +.katex .accent > .vlist-t { + text-align: center; +} +.katex .accent .accent-body { + position: relative; +} +.katex .accent .accent-body:not(.accent-full) { + width: 0; +} +.katex .overlay { + display: block; +} +.katex .mtable .vertical-separator { + display: inline-block; + min-width: 1px; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist-t { + text-align: center; +} +.katex .mtable .col-align-l > .vlist-t { + text-align: left; +} +.katex .mtable .col-align-r > .vlist-t { + text-align: right; +} +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.katex svg path { + stroke: none; +} +.katex img { + border-style: none; + min-width: 0; + min-height: 0; + max-width: none; + max-height: none; +} +.katex .stretchy { + width: 100%; + display: block; + position: relative; + overflow: hidden; +} +.katex .stretchy::before, +.katex .stretchy::after { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .cd-arrow-pad { + padding: 0 0.55556em 0 0.27778em; +} +.katex .x-arrow, +.katex .mover, +.katex .munder { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em; +} +.katex .fbox, +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em; +} +.katex .cancel-lap { + margin-left: -0.2em; + margin-right: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} +.katex .angl { + box-sizing: border-box; + border-top: 0.049em solid; + border-right: 0.049em solid; + margin-right: 0.03889em; +} +.katex .anglpad { + padding: 0 0.03889em; +} +.katex .eqn-num::before { + counter-increment: katexEqnNo; + content: "(" counter(katexEqnNo) ")"; +} +.katex .mml-eqn-num::before { + counter-increment: mmlEqnNo; + content: "(" counter(mmlEqnNo) ")"; +} +.katex .mtr-glue { + width: 50%; +} +.katex .cd-vert-arrow { + display: inline-block; + position: relative; +} +.katex .cd-label-left { + display: inline-block; + position: absolute; + right: calc(50% + 0.3em); + text-align: left; +} +.katex .cd-label-right { + display: inline-block; + position: absolute; + left: calc(50% + 0.3em); + text-align: right; +} +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} +.katex-display > .katex > .katex-html { + display: block; + position: relative; +} +.katex-display > .katex > .katex-html > .tag { + position: absolute; + right: 0; +} +.katex-display.leqno > .katex > .katex-html > .tag { + left: 0; + right: auto; +} +.katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} +body { + counter-reset: katexEqnNo mmlEqnNo; +} + diff --git a/katex/katex.js b/katex/katex.js new file mode 100644 index 0000000..8abf72d --- /dev/null +++ b/katex/katex.js @@ -0,0 +1,18819 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["katex"] = factory(); + else + root["katex"] = factory(); +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ katex_webpack; } +}); + +;// CONCATENATED MODULE: ./src/ParseError.js + + +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + */ +var ParseError = // Error start position based on passed-in Token or ParseNode. +// Length of affected text based on passed-in Token or ParseNode. +// The underlying error message without any context added. +function ParseError(message, // The error message +token // An object providing position information +) { + this.name = void 0; + this.position = void 0; + this.length = void 0; + this.rawMessage = void 0; + var error = "KaTeX parse error: " + message; + var start; + var end; + var loc = token && token.loc; + + if (loc && loc.start <= loc.end) { + // If we have the input and a position, make the error a bit fancier + // Get the input + var input = loc.lexer.input; // Prepend some information + + start = loc.start; + end = loc.end; + + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } // Underline token in question using combining underscores + + + var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error + + var left; + + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + // $FlowFixMe + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; + self.position = start; + + if (start != null && end != null) { + self.length = end - start; + } + + self.rawMessage = message; + return self; +}; // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; +/* harmony default export */ var src_ParseError = (ParseError); +;// CONCATENATED MODULE: ./src/utils.js +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function utils_escape(text) { + return String(text).replace(ESCAPE_REGEX, function (match) { + return ESCAPE_LOOKUP[match]; + }); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +/* harmony default export */ var utils = ({ + contains: contains, + deflt: deflt, + escape: utils_escape, + hyphenate: hyphenate, + getBaseElem: getBaseElem, + isCharacterBox: isCharacterBox, + protocolFromUrl: protocolFromUrl +}); +;// CONCATENATED MODULE: ./src/Settings.js +/* eslint no-console:0 */ + +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ + + + +// TODO: automatically generate documentation +// TODO: check all properties on Settings exist +// TODO: check the type of a property on Settings matches +var SETTINGS_SCHEMA = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format " + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: true, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color ", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", + cliProcessor: function cliProcessor(color) { + return "#" + color; + } + }, + macros: { + type: "object", + cli: "-m, --macro ", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: function cliProcessor(def, defs) { + defs.push(def); + return defs; + } + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: function processor(t) { + return Math.max(0, t); + }, + cli: "--min-rule-thickness ", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: false + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: Infinity, + description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", + processor: function processor(s) { + return Math.max(0, s); + }, + cli: "-s, --max-size ", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1000, + description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", + processor: function processor(n) { + return Math.max(0, n); + }, + cli: "-e, --max-expand ", + cliProcessor: function cliProcessor(n) { + return n === "Infinity" ? Infinity : parseInt(n); + } + }, + globalGroup: { + type: "boolean", + cli: false + } +}; + +function getDefaultValue(schema) { + if (schema.default) { + return schema.default; + } + + var type = schema.type; + var defaultType = Array.isArray(type) ? type[0] : type; + + if (typeof defaultType !== 'string') { + return defaultType.enum[0]; + } + + switch (defaultType) { + case 'boolean': + return false; + + case 'string': + return ''; + + case 'number': + return 0; + + case 'object': + return {}; + } +} +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ + + +var Settings = /*#__PURE__*/function () { + function Settings(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + + for (var prop in SETTINGS_SCHEMA) { + if (SETTINGS_SCHEMA.hasOwnProperty(prop)) { + // $FlowFixMe + var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options + // $FlowFixMe + + this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema); + } + } + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + var _proto = Settings.prototype; + + _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + ; + + _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + ; + + _proto.isTrusted = function isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + }; + + return Settings; +}(); + + +;// CONCATENATED MODULE: ./src/Style.js +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +var Style = /*#__PURE__*/function () { + function Style(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + var _proto = Style.prototype; + + _proto.sup = function sup() { + return styles[_sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + ; + + _proto.sub = function sub() { + return styles[_sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + ; + + _proto.fracNum = function fracNum() { + return styles[_fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + ; + + _proto.fracDen = function fracDen() { + return styles[_fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + ; + + _proto.cramp = function cramp() { + return styles[_cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + ; + + _proto.text = function text() { + return styles[_text[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + ; + + _proto.isTight = function isTight() { + return this.size >= 2; + }; + + return Style; +}(); // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +/* harmony default export */ var src_Style = ({ + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}); +;// CONCATENATED MODULE: ./src/unicodeScripts.js +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(function (s) { + return s.blocks.forEach(function (b) { + return allBlocks.push.apply(allBlocks, b); + }); +}); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} +;// CONCATENATED MODULE: ./src/svgGeometry.js +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping. +// The vinculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraVinculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraVinculum below. +// The detour proceeds one extraVinculum distance up and slightly to the right, +// displacing the radiused corner between surd and vinculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long vinculum, then down one extraVinculum distance, +// after which it resumes regular path geometry for the radical. + +/* vinculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum + / █████████████████████←0.04em (40 unit) std vinculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraVinculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraVinculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraVinculum + hLinePad) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraVinculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\nh400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraVinculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z"; +}; + +var phasePath = function phasePath(y) { + var x = y / 2; // x coordinate at top of angle + + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; + +var sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the vinculum + // to a point near (14 units) the bottom of the surd. The vinculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum; + return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) { + extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraVinculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraVinculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraVinculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraVinculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraVinculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var innerPath = function innerPath(name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239C": + return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; + + case "\u2223": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; + + case "\u2225": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); + + case "\u239F": + return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; + + case "\u23A2": + return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; + + case "\u23A5": + return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; + + case "\u23AA": + return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; + + case "\u23D0": + return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; + + case "\u2016": + return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); + + default: + return ""; + } +}; +var path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +var tallDelim = function tallDelim(label, midHeight) { + switch (label) { + case "lbrack": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z"; + + case "rbrack": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z"; + + case "vert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z"; + + case "doublevert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z"; + + case "lfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "rfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "lceil": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z"; + + case "rceil": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z"; + + case "lparen": + return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"; + + case "rparen": + return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"; + + default: + // We should not ever get here. + throw new Error("Unknown stretchy delimiter."); + } +}; +;// CONCATENATED MODULE: ./src/tree.js + + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +var DocumentFragment = /*#__PURE__*/function () { + // HtmlDomNode + // Never used; needed for satisfying interface. + function DocumentFragment(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + var _proto = DocumentFragment.prototype; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + ; + + _proto.toNode = function toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + ; + + _proto.toText = function toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = function toText(child) { + return child.toText(); + }; + + return this.children.map(toText).join(""); + }; + + return DocumentFragment; +}(); +;// CONCATENATED MODULE: ./src/fontMetricsData.js +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +/* harmony default export */ var fontMetricsData = ({ + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8773": [0.027, 0.638, 0, 0, 0.894], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 0.778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}); +;// CONCATENATED MODULE: ./src/fontMetrics.js + + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retrieved using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// metrics, including height, depth, italic correction, and skew (kern from the +// character to the corresponding \skewchar) +// This map is generated via `make metrics`. It should not be changed manually. + + // These are very rough approximations. We default to Times New Roman which +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glyph + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} +;// CONCATENATED MODULE: ./src/Options.js +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +var Options = /*#__PURE__*/function () { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + function Options(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + var _proto = Options.prototype; + + _proto.extend = function extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + ; + + _proto.havingStyle = function havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + ; + + _proto.havingCrampedStyle = function havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + ; + + _proto.havingSize = function havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + ; + + _proto.havingBaseStyle = function havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + ; + + _proto.havingBaseSizing = function havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + ; + + _proto.withColor = function withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + ; + + _proto.withPhantom = function withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + ; + + _proto.withFont = function withFont(font) { + return this.extend({ + font: font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + ; + + _proto.withTextFontFamily = function withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily: fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontWeight = function withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight: fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontShape = function withTextFontShape(fontShape) { + return this.extend({ + fontShape: fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + ; + + _proto.sizingClasses = function sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + ; + + _proto.baseSizingClasses = function baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + ; + + _proto.fontMetrics = function fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + ; + + _proto.getColor = function getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + }; + + return Options; +}(); + +Options.BASESIZE = 6; +/* harmony default export */ var src_Options = (Options); +;// CONCATENATED MODULE: ./src/units.js +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + + // This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +/** + * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See + * https://github.com/KaTeX/KaTeX/pull/2460. + */ + +var makeEm = function makeEm(n) { + return +n.toFixed(4) + "em"; +}; +;// CONCATENATED MODULE: ./src/domTree.js +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + + + + + + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(function (cls) { + return cls; + }).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var _toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var _toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +var Span = /*#__PURE__*/function () { + function Span(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + var _proto = Span.prototype; + + _proto.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto.toNode = function toNode() { + return _toNode.call(this, "span"); + }; + + _proto.toMarkup = function toMarkup() { + return _toMarkup.call(this, "span"); + }; + + return Span; +}(); +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +var Anchor = /*#__PURE__*/function () { + function Anchor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + var _proto2 = Anchor.prototype; + + _proto2.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto2.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto2.toNode = function toNode() { + return _toNode.call(this, "a"); + }; + + _proto2.toMarkup = function toMarkup() { + return _toMarkup.call(this, "a"); + }; + + return Anchor; +}(); +/** + * This node represents an image embed () element. + */ + +var Img = /*#__PURE__*/function () { + function Img(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + var _proto3 = Img.prototype; + + _proto3.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto3.toNode = function toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + }; + + _proto3.toMarkup = function toMarkup() { + var markup = "" + this.alt + " 0) { + span = document.createElement("span"); + span.style.marginRight = makeEm(this.italic); + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + ; + + _proto4.toMarkup = function toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + }; + + return SymbolNode; +}(); +/** + * SVG nodes are used to render stretchy wide elements. + */ + +var SvgNode = /*#__PURE__*/function () { + function SvgNode(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + var _proto5 = SvgNode.prototype; + + _proto5.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + }; + + _proto5.toMarkup = function toMarkup() { + var markup = ""; + } else { + return ""; + } + }; + + return PathNode; +}(); +var LineNode = /*#__PURE__*/function () { + function LineNode(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + var _proto7 = LineNode.prototype; + + _proto7.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + }; + + _proto7.toMarkup = function toMarkup() { + var markup = " but got " + String(group) + "."); + } +} +;// CONCATENATED MODULE: ./src/symbols.js +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/* harmony default export */ var src_symbols = (symbols); +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font: font, + group: group, + replace: replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var math = "math"; +var symbols_text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var accent = "accent-token"; +var bin = "bin"; +var symbols_close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var symbols_open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227A", "\\prec", true); +defineSymbol(math, main, rel, "\u227B", "\\succ", true); +defineSymbol(math, main, rel, "\u223C", "\\sim", true); +defineSymbol(math, main, rel, "\u22A5", "\\perp"); +defineSymbol(math, main, rel, "\u2AAF", "\\preceq", true); +defineSymbol(math, main, rel, "\u2AB0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226A", "\\ll", true); +defineSymbol(math, main, rel, "\u226B", "\\gg", true); +defineSymbol(math, main, rel, "\u224D", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22C8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220B", "\\ni", true); +defineSymbol(math, main, rel, "\u221D", "\\propto", true); +defineSymbol(math, main, rel, "\u22A2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22A3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220B", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, ".", "\\ldotp"); +defineSymbol(math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "#", "\\#"); +defineSymbol(symbols_text, main, textord, "#", "\\#"); +defineSymbol(math, main, textord, "&", "\\&"); +defineSymbol(symbols_text, main, textord, "&", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210F", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266D", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266E", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266F", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211C", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\xA7", "\\S", true); +defineSymbol(symbols_text, main, textord, "\xA7", "\\S"); +defineSymbol(math, main, textord, "\xB6", "\\P", true); +defineSymbol(symbols_text, main, textord, "\xB6", "\\P"); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, symbols_close, "\u23B1", "\\rmoustache", true); +defineSymbol(math, main, symbols_open, "\u23B0", "\\lmoustache", true); +defineSymbol(math, main, symbols_close, "\u27EF", "\\rgroup", true); +defineSymbol(math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228E", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25EF", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet", true); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2A3F", "\\amalg"); +defineSymbol(math, main, bin, "&", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21A6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27FC", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\uE010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\uE011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2A87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\uE00C", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22E6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22E0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22E8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\uE006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22AC", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22AD", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228A", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\uE01A", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\uE017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226F", "\\ngtr", true); +defineSymbol(math, ams, rel, "\uE00F", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\uE00E", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2A88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\uE00D", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22E7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22E9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\uE007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22AF", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\uE018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228B", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\uE01B", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\uE019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22AE", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\uE016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22B4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210F", "\\hslash"); +defineSymbol(math, ams, textord, "\u25BD", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25CA", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24C8", "\\circledS"); +defineSymbol(math, ams, textord, "\xAE", "\\circledR"); +defineSymbol(symbols_text, ams, textord, "\xAE", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\xF0", "\\eth", true); +defineSymbol(symbols_text, main, textord, "\xF0", "\xF0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25A1", "\\square"); +defineSymbol(math, ams, textord, "\u25A1", "\\Box"); +defineSymbol(math, ams, textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\xA5", "\\yen", true); +defineSymbol(symbols_text, ams, textord, "\xA5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(symbols_text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03DD", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03F0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, symbols_open, "\u250C", "\\@ulcorner", true); +defineSymbol(math, ams, symbols_close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, symbols_open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, symbols_close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224A", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22D6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22D8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223D", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22D0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228F", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227E", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22A8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224F", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22D9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225C", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223C", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22D1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227F", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22A9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226C", "\\between", true); +defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221D", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220D", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22D8", "\\llless"); +defineSymbol(math, ams, rel, "\u22D9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22B2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22B3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22C8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22D2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22D3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229F", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229E", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22C9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22CA", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229D", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229B", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22C5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22BA", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22D2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22D3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21B0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22B6", "\\origof", true); // not in font + +defineSymbol(math, main, rel, "\u22B7", "\\imageof", true); // not in font + +defineSymbol(math, ams, rel, "\u22B8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21B1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21DD", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21BE", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\$"); +defineSymbol(symbols_text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(symbols_text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\_"); +defineSymbol(symbols_text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221E", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25B3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039B", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039E", "\\Xi", true); +defineSymbol(math, main, textord, "\u03A0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03A6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03A8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03A9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\xAC", "\\neg", true); +defineSymbol(math, main, textord, "\xAC", "\\lnot"); +defineSymbol(math, main, textord, "\u22A4", "\\top"); +defineSymbol(math, main, textord, "\u22A5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03B2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03B4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03B7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03B8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03B9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03BC", "\\mu", true); +defineSymbol(math, main, mathord, "\u03BD", "\\nu", true); +defineSymbol(math, main, mathord, "\u03BE", "\\xi", true); +defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03C0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03C1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03C4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03D5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03C7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03C8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03C9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22C5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ", true); +defineSymbol(math, main, bin, "\xF7", "\\div", true); +defineSymbol(math, main, bin, "\xB1", "\\pm", true); +defineSymbol(math, main, bin, "\xD7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222A", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus", true); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221A", "\\surd"); +defineSymbol(math, main, symbols_open, "\u27E8", "\\langle", true); +defineSymbol(math, main, symbols_open, "\u2223", "\\lvert"); +defineSymbol(math, main, symbols_open, "\u2225", "\\lVert"); +defineSymbol(math, main, symbols_close, "?", "?"); +defineSymbol(math, main, symbols_close, "!", "!"); +defineSymbol(math, main, symbols_close, "\u27E9", "\\rangle", true); +defineSymbol(math, main, symbols_close, "\u2223", "\\rvert"); +defineSymbol(math, main, symbols_close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\uE020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22A8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\xA0", "\\ "); +defineSymbol(math, main, spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\xA0", "\\nobreakspace"); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\ "); +defineSymbol(symbols_text, main, spacing, "\xA0", " "); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\space"); +defineSymbol(symbols_text, main, spacing, "\xA0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22BC", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22BB", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229A", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22A1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22C4", "\\diamond"); +defineSymbol(math, main, bin, "\u22C6", "\\star"); +defineSymbol(math, main, bin, "\u25C3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25B9", "\\triangleright"); +defineSymbol(math, main, symbols_open, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\{"); +defineSymbol(symbols_text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, symbols_close, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\}"); +defineSymbol(symbols_text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, symbols_open, "{", "\\lbrace"); +defineSymbol(math, main, symbols_close, "}", "\\rbrace"); +defineSymbol(math, main, symbols_open, "[", "\\lbrack", true); +defineSymbol(symbols_text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, symbols_close, "]", "\\rbrack", true); +defineSymbol(symbols_text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, symbols_open, "(", "\\lparen", true); +defineSymbol(math, main, symbols_close, ")", "\\rparen", true); +defineSymbol(symbols_text, main, textord, "<", "\\textless", true); // in T1 fontenc + +defineSymbol(symbols_text, main, textord, ">", "\\textgreater", true); // in T1 fontenc + +defineSymbol(math, main, symbols_open, "\u230A", "\\lfloor", true); +defineSymbol(math, main, symbols_close, "\u230B", "\\rfloor", true); +defineSymbol(math, main, symbols_open, "\u2308", "\\lceil", true); +defineSymbol(math, main, symbols_close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(symbols_text, main, textord, "|", "\\textbar", true); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(symbols_text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(symbols_text, main, textord, "~", "\\textasciitilde"); +defineSymbol(symbols_text, main, textord, "\\", "\\textbackslash"); +defineSymbol(symbols_text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21D1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21D3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22C1", "\\bigvee"); +defineSymbol(math, main, op, "\u22C0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2A04", "\\biguplus"); +defineSymbol(math, main, op, "\u22C2", "\\bigcap"); +defineSymbol(math, main, op, "\u22C3", "\\bigcup"); +defineSymbol(math, main, op, "\u222B", "\\int"); +defineSymbol(math, main, op, "\u222B", "\\intop"); +defineSymbol(math, main, op, "\u222C", "\\iint"); +defineSymbol(math, main, op, "\u222D", "\\iiint"); +defineSymbol(math, main, op, "\u220F", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2A02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2A01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2A00", "\\bigodot"); +defineSymbol(math, main, op, "\u222E", "\\oint"); +defineSymbol(math, main, op, "\u222F", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2A06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222B", "\\smallint"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(symbols_text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22EF", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22F1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22EE", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02CA", "\\acute"); +defineSymbol(math, main, accent, "\u02CB", "\\grave"); +defineSymbol(math, main, accent, "\xA8", "\\ddot"); +defineSymbol(math, main, accent, "~", "\\tilde"); +defineSymbol(math, main, accent, "\u02C9", "\\bar"); +defineSymbol(math, main, accent, "\u02D8", "\\breve"); +defineSymbol(math, main, accent, "\u02C7", "\\check"); +defineSymbol(math, main, accent, "^", "\\hat"); +defineSymbol(math, main, accent, "\u20D7", "\\vec"); +defineSymbol(math, main, accent, "\u02D9", "\\dot"); +defineSymbol(math, main, accent, "\u02DA", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA + +defineSymbol(math, main, mathord, "\uE131", "\\@imath"); +defineSymbol(math, main, mathord, "\uE237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(symbols_text, main, textord, "\u0131", "\\i", true); +defineSymbol(symbols_text, main, textord, "\u0237", "\\j", true); +defineSymbol(symbols_text, main, textord, "\xDF", "\\ss", true); +defineSymbol(symbols_text, main, textord, "\xE6", "\\ae", true); +defineSymbol(symbols_text, main, textord, "\u0153", "\\oe", true); +defineSymbol(symbols_text, main, textord, "\xF8", "\\o", true); +defineSymbol(symbols_text, main, textord, "\xC6", "\\AE", true); +defineSymbol(symbols_text, main, textord, "\u0152", "\\OE", true); +defineSymbol(symbols_text, main, textord, "\xD8", "\\O", true); +defineSymbol(symbols_text, main, accent, "\u02CA", "\\'"); // acute + +defineSymbol(symbols_text, main, accent, "\u02CB", "\\`"); // grave + +defineSymbol(symbols_text, main, accent, "\u02C6", "\\^"); // circumflex + +defineSymbol(symbols_text, main, accent, "\u02DC", "\\~"); // tilde + +defineSymbol(symbols_text, main, accent, "\u02C9", "\\="); // macron + +defineSymbol(symbols_text, main, accent, "\u02D8", "\\u"); // breve + +defineSymbol(symbols_text, main, accent, "\u02D9", "\\."); // dot above + +defineSymbol(symbols_text, main, accent, "\xB8", "\\c"); // cedilla + +defineSymbol(symbols_text, main, accent, "\u02DA", "\\r"); // ring above + +defineSymbol(symbols_text, main, accent, "\u02C7", "\\v"); // caron + +defineSymbol(symbols_text, main, accent, "\xA8", '\\"'); // diaresis + +defineSymbol(symbols_text, main, accent, "\u02DD", "\\H"); // double acute + +defineSymbol(symbols_text, main, accent, "\u25EF", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(symbols_text, main, textord, "\u2013", "--", true); +defineSymbol(symbols_text, main, textord, "\u2013", "\\textendash"); +defineSymbol(symbols_text, main, textord, "\u2014", "---", true); +defineSymbol(symbols_text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(symbols_text, main, textord, "\u2018", "`", true); +defineSymbol(symbols_text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(symbols_text, main, textord, "\u2019", "'", true); +defineSymbol(symbols_text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(symbols_text, main, textord, "\u201C", "``", true); +defineSymbol(symbols_text, main, textord, "\u201C", "\\textquotedblleft"); +defineSymbol(symbols_text, main, textord, "\u201D", "''", true); +defineSymbol(symbols_text, main, textord, "\u201D", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\xB0", "\\degree", true); +defineSymbol(symbols_text, main, textord, "\xB0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(symbols_text, main, textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". + +defineSymbol(math, main, textord, "\xA3", "\\pounds"); +defineSymbol(math, main, textord, "\xA3", "\\mathsterling", true); +defineSymbol(symbols_text, main, textord, "\xA3", "\\pounds"); +defineSymbol(symbols_text, main, textord, "\xA3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(symbols_text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+\";:?/.,"; + +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + + defineSymbol(symbols_text, main, textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(symbols_text, main, textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(symbols_text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(symbols_text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(symbols_text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(symbols_text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(symbols_text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(symbols_text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(symbols_text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var wideChar = ""; + +for (var _i3 = 0; _i3 < letters.length; _i3++) { + var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + + if (_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(symbols_text, main, textord, _ch3, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(symbols_text, main, textord, "k", wideChar); // Next, some wide character numerals + +for (var _i4 = 0; _i4 < 10; _i4++) { + var _ch4 = _i4.toString(); + + wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(symbols_text, main, textord, _ch4, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "\xD0\xDE\xFE"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(symbols_text, main, textord, _ch5, _ch5); +} +;// CONCATENATED MODULE: ./src/wide-character.js +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ + +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathnormal", "textit", "Math-Italic"], // A-Z italic +["mathnormal", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace +]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace +]; +var wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new src_ParseError("Unsupported character: " + wideChar); + } +}; +;// CONCATENATED MODULE: ./src/buildCommon.js +/* eslint no-console:0 */ + +/** + * This module contains general functions that can be used for building + * different kinds of domTree nodes in a consistent manner. + */ + + + + + + + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (src_symbols[mode][value] && src_symbols[mode][value].replace) { + value = src_symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || src_symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + var _wideCharacterFont = wideCharacterFont(text, mode), + wideFontName = _wideCharacterFont[0], + wideFontClass = _wideCharacterFont[1]; + + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol") { + var fontData = boldsymbol(text, mode, options, classes, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + var font = src_symbols[mode][text] && src_symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var canCombine = function canCombine(prev, next) { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + + + if (prev.classes.length === 1) { + var cls = prev.classes[0]; + + if (cls === "mbin" || cls === "mord") { + return false; + } + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var tryCombineChars = function tryCombineChars(chars) { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var makeSpan = function makeSpan(classes, children, options, style) { + var span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var makeSvgSpan = function makeSvgSpan(classes, children, options, style) { + return new Span(classes, children, options, style); +}; + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = makeSpan([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = makeEm(line.height); + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var makeFragment = function makeFragment(children) { + var fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size: size + }); + children.push(oldChildren[i]); + } + + return { + children: children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth: depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var makeVList = function makeVList(params, options) { + var _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = makeSpan(["pstrut"], []); + pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = makeSpan(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth); + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = makeSpan(["vlist"], realChildren); + vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = makeSpan([], []); + var depthStrut = makeSpan(["vlist"], [emptySpan]); + depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200B")]); + rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var makeGlue = function makeGlue(measurement, options) { + // Make an empty span for the space + var rule = makeSpan(["mspace"], [], options); + var size = calculateSize(measurement, options); + rule.style.marginRight = makeEm(size); + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var _svgData$value = svgData[value], + pathName = _svgData$value[0], + width = _svgData$value[1], + height = _svgData$value[2]; + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return span; +}; + +/* harmony default export */ var buildCommon = ({ + fontMap: fontMap, + makeSymbol: makeSymbol, + mathsym: mathsym, + makeSpan: makeSpan, + makeSvgSpan: makeSvgSpan, + makeLineSpan: makeLineSpan, + makeAnchor: makeAnchor, + makeFragment: makeFragment, + wrapFragment: wrapFragment, + makeVList: makeVList, + makeOrd: makeOrd, + makeGlue: makeGlue, + staticSvg: staticSvg, + svgData: svgData, + tryCombineChars: tryCombineChars +}); +;// CONCATENATED MODULE: ./src/spacingData.js +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; +;// CONCATENATED MODULE: ./src/defineFunction.js +/** Context provided to function handlers for error messages. */ +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of functions + var data = { + type: type, + numArgs: props.numArgs, + argTypes: props.argTypes, + allowedInArgument: !!props.allowedInArgument, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + primitive: !!props.primitive, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var type = _ref2.type, + htmlBuilder = _ref2.htmlBuilder, + mathmlBuilder = _ref2.mathmlBuilder; + defineFunction({ + type: type, + names: [], + props: { + numArgs: 0 + }, + handler: function handler() { + throw new Error('Should never be called.'); + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder + }); +} +var normalizeArgument = function normalizeArgument(arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var ordargument = function ordargument(arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; +;// CONCATENATED MODULE: ./src/buildHTML.js +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ + + + + + + + + + +var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildGroup(expression[i], options); + + if (output instanceof DocumentFragment) { + var children = output.children; + groups.push.apply(groups, children); + } else { + groups.push(output); + } + } // Combine consecutive domTree.symbolNodes into a single symbolNode. + + + buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = expression[0]; + + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options); + var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + var isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + var nonspace = !node.hasClass("mspace"); + + if (nonspace) { + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("newline")) { + prev.node = buildHTML_makeSpan(["leftmost"]); // treat like beginning of line + } + + prev.insertAfter = function (index) { + return function (n) { + nodes.splice(index + 1, 0, n); + i++; + }; + }(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return buildHTML_makeSpan(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildGroup = function buildGroup(group, options, baseOptions) { + if (!group) { + return buildHTML_makeSpan(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + + var strut = buildHTML_makeSpan(["strut"]); + strut.style.height = makeEm(body.height + body.depth); + + if (body.depth) { + strut.style.verticalAlign = makeEm(-body.depth); + } + + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildExpression(tree, options, "root"); + var eqnNum; + + if (expression.length === 2 && expression[1].hasClass("tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + + var htmlNode = buildHTML_makeSpan(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = makeEm(htmlNode.height + htmlNode.depth); + + if (htmlNode.depth) { + strut.style.verticalAlign = makeEm(-htmlNode.depth); + } + } + + return htmlNode; +} +;// CONCATENATED MODULE: ./src/mathMLTree.js +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work similarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ + + + + +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +var MathNode = /*#__PURE__*/function () { + function MathNode(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + var _proto = MathNode.prototype; + + _proto.setAttribute = function setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + ; + + _proto.getAttribute = function getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + ; + + _proto.toNode = function toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + if (this.classes.length > 0) { + markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + ; + + _proto.toText = function toText() { + return this.children.map(function (child) { + return child.toText(); + }).join(""); + }; + + return MathNode; +}(); +/** + * This node represents a piece of text. + */ + +var TextNode = /*#__PURE__*/function () { + function TextNode(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + var _proto2 = TextNode.prototype; + + _proto2.toNode = function toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + ; + + _proto2.toMarkup = function toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text itself). + */ + ; + + _proto2.toText = function toText() { + return this.text; + }; + + return TextNode; +}(); +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +var SpaceNode = /*#__PURE__*/function () { + /** + * Create a Space node with width given in CSS ems. + */ + function SpaceNode(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200A"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200A"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200A\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205F\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + var _proto3 = SpaceNode.prototype; + + _proto3.toNode = function toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", makeEm(this.width)); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto3.toMarkup = function toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + ; + + _proto3.toText = function toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + }; + + return SpaceNode; +}(); + +/* harmony default export */ var mathMLTree = ({ + MathNode: MathNode, + TextNode: TextNode, + SpaceNode: SpaceNode, + newDocumentFragment: newDocumentFragment +}); +;// CONCATENATED MODULE: ./src/buildMathML.js +/** + * This file converts a parse tree into a corresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + + + + + + + + + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function makeText(text, mode, options) { + if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === "tt" || options.font && options.font.slice(4, 6) === "tt"))) { + text = src_symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return group.type === "textord" ? "bold" : "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and calligraphic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (src_symbols[mode][text] && src_symbols[mode][text].replace) { + text = src_symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildMathML_buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildMathML_buildGroup(expression[i], options); + + if (_group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + var _lastGroup$children; + + (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children); + + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + var _lastGroup$children2; + + (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children); + + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + var _lastGroup$children3; + + (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children); + + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildMathML_buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildMathML_buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe + + return result; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + var expression = buildMathML_buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + + if (isDisplayMode) { + math.setAttribute("display", "block"); + } // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} +;// CONCATENATED MODULE: ./src/buildTree.js + + + + + + + +var optionsFromSettings = function optionsFromSettings(settings) { + return new src_Options({ + style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree = function buildTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; +/* harmony default export */ var src_buildTree = ((/* unused pure expression or super */ null && (buildTree))); +;// CONCATENATED MODULE: ./src/stretchy.js +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ + + + + + +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23DF", + overbrace: "\u23DE", + overgroup: "\u23E0", + undergroup: "\u23E1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21D2", + xRightarrow: "\u21D2", + overleftharpoon: "\u21BC", + xleftharpoonup: "\u21BC", + overrightharpoon: "\u21C0", + xrightharpoonup: "\u21C0", + xLeftarrow: "\u21D0", + xLeftrightarrow: "\u21D4", + xhookleftarrow: "\u21A9", + xhookrightarrow: "\u21AA", + xmapsto: "\u21A6", + xrightharpoondown: "\u21C1", + xleftharpoondown: "\u21BD", + xrightleftharpoons: "\u21CC", + xleftrightharpoons: "\u21CB", + xtwoheadleftarrow: "\u219E", + xtwoheadrightarrow: "\u21A0", + xlongequal: "=", + xtofrom: "\u21C4", + xrightleftarrows: "\u21C4", + xrightequilibrium: "\u21CC", + // Not a perfect match. + xleftequilibrium: "\u21CB", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; + +var mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.slice(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + // $FlowFixMe + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": makeEm(_height), + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var paths = data[0], + _minWidth = data[1], + _viewBoxHeight = data[2]; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": makeEm(_height2), + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = makeEm(_height2); + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + + span.height = height; + span.style.height = makeEm(height); + + if (minWidth > 0) { + span.style.minWidth = makeEm(minWidth); + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + var img; + var totalHeight = inner.height + inner.depth + topPad + bottomPad; + + if (/fbox|color|angl/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": makeEm(totalHeight) + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = makeEm(totalHeight); + return img; +}; + +/* harmony default export */ var stretchy = ({ + encloseSpan: encloseSpan, + mathMLnode: mathMLnode, + svgSpan: svgSpan +}); +;// CONCATENATED MODULE: ./src/parseNode.js + + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe, >=0.125 + + + return node; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} +;// CONCATENATED MODULE: ./src/functions/accent.js + + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +var htmlBuilder = function htmlBuilder(grp, options) { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSubGroup; + + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + grp.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup(grp, options)); // reset original base + + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } + + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent + + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = makeEm(left); // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + makeEm(2 * skew) + ")", + marginLeft: makeEm(2 * skew) + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(function (accent) { + return "\\" + accent; +}).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var base = normalizeArgument(args[0]); + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: function handler(context, args) { + var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/accentunder.js +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Treat under accents much like underlines. + var innerGroup = buildGroup(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/arrow.js + + + + + + + +// Helper function +var paddedNode = function paddedNode(group) { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + // Flow is unable to correctly infer the type of `group`, even though it's + // unambiguously determined from the passed-in `type` above. + htmlBuilder: function htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options); + var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var node; + + if (group.body) { + var upperNode = paddedNode(buildMathML_buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = paddedNode(buildMathML_buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/mclass.js + + + + + + +var mclass_makeSpan = buildCommon.makeSpan; + +function mclass_htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, true); + return mclass_makeSpan([group.mclass], elements, options); +} + +function mclass_mathmlBuilder(group, options) { + var node; + var inner = buildMathML_buildExpression(group.body, options); + + if (group.mclass === "minner") { + node = new mathMLTree.MathNode("mpadded", inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } else if (group.mclass === "minner") { + node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option + + node.attributes.width = "+0.1111em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.slice(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +var binrelClass = function binrelClass(arg) { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass: mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/pmb.js + + + + + + +// \pmb is a simulation of bold font. +// The version of \pmb in ambsy.sty works by typesetting three copies +// with small offsets. We use CSS text-shadow. +// It's a hack. Not as good as a real bold font. Better than nothing. +defineFunction({ + type: "pmb", + names: ["\\pmb"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "pmb", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[0]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, true); + var node = buildCommon.makeSpan([group.mclass], elements, options); + node.style.textShadow = "0.02em 0.01em 0.04px"; + return node; + }, + mathmlBuilder: function mathmlBuilder(group, style) { + var inner = buildMathML_buildExpression(group.body, style); // Wrap with an element. + + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/environments/cd.js + + + + + + + + +var cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; + +var newCell = function newCell() { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + // So these values are fixed and flow can do implicit typing. + return { + type: "styling", + body: [], + mode: "math", + style: "display" + }; +}; + +var isStartOfArrow = function isStartOfArrow(node) { + return node.type === "textord" && node.text === "@"; +}; + +var isLabelEnd = function isLabelEnd(node, endChar) { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; + +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + var funcName = cdArrowFunctionName[arrowChar]; + + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + + case "\\uparrow": + case "\\downarrow": + { + var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + var bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + var arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + + case "\\Vert": + { + var arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} + +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + var parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + + while (true) { + // eslint-disable-line no-constant-condition + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + var next = parser.fetch().text; + + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + + break; + } else { + throw new src_ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + + var row = []; + var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. + + for (var i = 0; i < parsedRows.length; i++) { + // Start a new row. + var rowNodes = parsedRows[i]; // Create the first cell. + + var cell = newCell(); + + for (var j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + + j += 1; + var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. + + var labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; // Process the arrow. + + if ("=|.".indexOf(arrowChar) > -1) {// Three "arrows", ``@=`, `@|`, and `@.`, do not take labels. + // Do nothing here. + } else if ("<>AV".indexOf(arrowChar) > -1) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (var labelNum = 0; labelNum < 2; labelNum++) { + var inLabel = true; + + for (var k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + + if (isStartOfArrow(rowNodes[k])) { + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + + labels[labelNum].body.push(rowNodes[k]); + } + + if (inLabel) { + // isLabelEnd never returned a true. + throw new src_ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new src_ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } // Now join the arrow to its labels. + + + var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + + var wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display" // CD is always displaystyle. + + }; + row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + + cell = newCell(); + } + } + + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + + row = []; + body.push(row); + } // End row group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); // define column separation. + + var cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + + }); + return { + type: "array", + mode: "math", + body: body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols: cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} // The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = options.havingStyle(options.style.sup()); + var label = buildCommon.wrapFragment(buildGroup(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + + label.height = 0; + label.depth = 0; + return label; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var label = new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.label, options)]); + label = new mathMLTree.MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + + + label.setAttribute("voffset", "0.7em"); + label = new mathMLTree.MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + var parent = buildCommon.wrapFragment(buildGroup(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", [buildMathML_buildGroup(group.fragment, options)]); + } +}); +;// CONCATENATED MODULE: ./src/functions/char.js + + + // \@char is an internal function that takes a grouped decimal argument like +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + var text; + + if (isNaN(code)) { + throw new src_ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new src_ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + + return { + type: "textord", + mode: parser.mode, + text: text + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/color.js + + + + + + + +var color_htmlBuilder = function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var color_mathmlBuilder = function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color: color, + body: ordargument(body) + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + argTypes: ["color"] + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser, + breakOnTokenText = _ref2.breakOnTokenText; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color: color, + body: body + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/cr.js +// Row breaks within tabular environments, and line breaks at top level + + + + + // \DeclareRobustCommand\\{...\@xnewline} + +defineFunction({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 0, + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null; + var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); + return { + type: "cr", + mode: parser.mode, + newLine: newLine, + size: size && assertNodeType(size, "size").value + }; + }, + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder: function htmlBuilder(group, options) { + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = makeEm(calculateSize(group.size, options)); + } + } + + return span; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", makeEm(calculateSize(group.size, options))); + } + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/def.js + + + +var globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; + +var checkControlSequence = function checkControlSequence(tok) { + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + + return name; +}; + +var getRHS = function getRHS(parser) { + var tok = parser.gullet.popToken(); + + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + + return tok; +}; + +var letCommand = function letCommand(parser, name, tok, global) { + var macro = parser.gullet.macros.get(tok.text); + + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + + parser.gullet.macros.set(name, macro, global); +}; // -> | +// -> |\global +// -> | +// -> \global|\long|\outer + + +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref) { + var parser = _ref.parser, + funcName = _ref.funcName; + parser.consumeSpaces(); + var token = parser.fetch(); + + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + + return assertNodeType(parser.parseFunction(), "internal"); + } + + throw new src_ParseError("Invalid token after macro prefix", token); + } +}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> + +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref2) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var tok = parser.gullet.popToken(); + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new src_ParseError("Expected a control sequence", tok); + } + + var numArgs = 0; + var insert; + var delimiters = [[]]; // contains no braces + + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + + + tok = parser.gullet.popToken(); + + if (!/^[1-9]$/.test(tok.text)) { + throw new src_ParseError("Invalid argument number \"" + tok.text + "\""); + } + + if (parseInt(tok.text) !== numArgs + 1) { + throw new src_ParseError("Argument number \"" + tok.text + "\" out of order"); + } + + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new src_ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } // replacement text, enclosed in '{' and '}' and properly nested + + + var _parser$gullet$consum = parser.gullet.consumeArg(), + tokens = _parser$gullet$consum.tokens; + + if (insert) { + tokens.unshift(insert); + } + + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } // Final arg is the expansion of the macro + + + parser.gullet.macros.set(name, { + tokens: tokens, + numArgs: numArgs, + delimiters: delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } +}); // -> +// -> \futurelet +// | \let +// -> |= + +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + var name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + var tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } +}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf + +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref4) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + var name = checkControlSequence(parser.gullet.popToken()); + var middle = parser.gullet.popToken(); + var tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } +}); +;// CONCATENATED MODULE: ./src/delimiter.js +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + + + + + + + + + + + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font, mode) { + var replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = makeEm(shift); + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes); + + if (center) { + centerSpan(span, options, src_Style.TEXT); + } + + return span; +}; +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ + + +var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: corner + }; +}; + +var makeInner = function makeInner(ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + var width = fontMetricsData["Size4-Regular"][ch.charCodeAt(0)] ? fontMetricsData["Size4-Regular"][ch.charCodeAt(0)][4] : fontMetricsData["Size1-Regular"][ch.charCodeAt(0)][4]; + var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon.makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return { + type: "elem", + elem: span + }; +}; // Helpers for makeStackedDelim + + +var lapInEms = 0.008; +var lap = { + type: "kern", + size: -1 * lapInEms +}; +var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; +var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + var svgLabel = ""; + var viewBoxWidth = 0; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23D0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23D0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23D0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (utils.contains(verts, delim)) { + repeat = "\u2223"; + svgLabel = "vert"; + viewBoxWidth = 333; + } else if (utils.contains(doubleVerts, delim)) { + repeat = "\u2225"; + svgLabel = "doublevert"; + viewBoxWidth = 556; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23A1"; + repeat = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + svgLabel = "lbrack"; + viewBoxWidth = 667; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23A4"; + repeat = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + svgLabel = "rbrack"; + viewBoxWidth = 667; + } else if (delim === "\\lfloor" || delim === "\u230A") { + repeat = top = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + svgLabel = "lfloor"; + viewBoxWidth = 667; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23A1"; + repeat = bottom = "\u23A2"; + font = "Size4-Regular"; + svgLabel = "lceil"; + viewBoxWidth = 667; + } else if (delim === "\\rfloor" || delim === "\u230B") { + repeat = top = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + svgLabel = "rfloor"; + viewBoxWidth = 667; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23A4"; + repeat = bottom = "\u23A5"; + font = "Size4-Regular"; + svgLabel = "rceil"; + viewBoxWidth = 667; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239B"; + repeat = "\u239C"; + bottom = "\u239D"; + font = "Size4-Regular"; + svgLabel = "lparen"; + viewBoxWidth = 875; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239E"; + repeat = "\u239F"; + bottom = "\u23A0"; + font = "Size4-Regular"; + svgLabel = "rparen"; + viewBoxWidth = 875; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23A7"; + middle = "\u23A8"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23AB"; + middle = "\u23AC"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27EE") { + top = "\u23A7"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27EF") { + top = "\u23AB"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23B0") { + top = "\u23A7"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23B1") { + top = "\u23AB"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calculate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + + var stack = []; + + if (svgLabel.length > 0) { + // Instead of stacking glyphs, create a single SVG. + // This evades browser problems with imprecise positioning of spans. + var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; + var viewBoxHeight = Math.round(realHeightTotal * 1000); + var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000)); + var path = new PathNode(svgLabel, pathStr); + var width = (viewBoxWidth / 1000).toFixed(3) + "em"; + var height = (viewBoxHeight / 1000).toFixed(3) + "em"; + var svg = new SvgNode([path], { + "width": width, + "height": height, + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight + }); + var wrapper = buildCommon.makeSvgSpan([], [svg], options); + wrapper.height = viewBoxHeight / 1000; + wrapper.style.width = width; + wrapper.style.height = height; + stack.push({ + type: "elem", + elem: wrapper + }); + } else { + // Stack glyphs + // Start by adding the bottom symbol + stack.push(makeGlyphSpan(bottom, font, mode)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + + stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. + + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode)); + stack.push(lap); + stack.push(makeInner(repeat, _innerHeight, options)); + } // Add the top symbol + + + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode)); + } // Finally, build the vlist + + + var newOptions = options.havingBaseStyle(src_Style.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes); +}; // All surds have 0.08em padding above the vinculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) { + var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight); + var pathNode = new PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": makeEm(height), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick vinculum. + // If Settings.minRuleThickness is larger than that, we add extraVinculum. + + var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the vinculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraVinculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraVinculum + emPad; + texHeight = height + extraVinculum; + viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = makeEm(spanHeight); + return { + span: span, + advanceWidth: advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new src_ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +/* harmony default export */ var delimiter = ({ + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + sizeToMaxHeight: sizeToMaxHeight, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}); +;// CONCATENATED MODULE: ./src/functions/delimsizing.js + + + + + + + + + + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new src_ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new src_ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: function mathmlBuilder(group) { + var children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + node.setAttribute("stretchy", "true"); + var size = makeEm(delimiter.sizeToMaxHeight[group.size]); + node.setAttribute("minsize", size); + node.setAttribute("maxsize", size); + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new src_ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color: color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body: body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + assertParsed(group); // Build the inner expression + + var inner = buildExpression(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + assertParsed(group); + var inner = buildMathML_buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new src_ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options: options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // A Firefox \middle will stretch a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); +;// CONCATENATED MODULE: ./src/functions/enclose.js + + + + + + + + + + + + +var enclose_htmlBuilder = function htmlBuilder(group, options) { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildGroup(group.body, options), options); + var label = group.label.slice(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + var lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + var clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); // Prevent size changes like \Huge from affecting line thickness + + var newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. + + inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG + + var viewBoxHeight = Math.floor(1000 * angleHeight * scale); + var path = phasePath(viewBoxHeight); + var svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": makeEm(viewBoxHeight / 1000), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); // Wrap it in a span with overflow: hidden. + + img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = makeEm(angleHeight); + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var topPad = 0; + var bottomPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + + img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = makeEm(ruleThickness); + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = makeEm(ruleThickness); + img.style.borderRightWidth = makeEm(ruleThickness); + } + + imgShift = inner.depth + bottomPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var enclose_mathmlBuilder = function mathmlBuilder(group, options) { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "text"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "text"] + }, + handler: function handler(_ref2, args, optArgs) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: backgroundColor, + borderColor: borderColor, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + handler: function handler(_ref4, args) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false + }, + handler: function handler(_ref5, args) { + var parser = _ref5.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } +}); +;// CONCATENATED MODULE: ./src/defineEnvironment.js + + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of environments. + var data = { + type: type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} +;// CONCATENATED MODULE: ./src/defineMacro.js + + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} +;// CONCATENATED MODULE: ./src/SourceLocation.js +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +var SourceLocation = /*#__PURE__*/function () { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + function SourceLocation(lexer, start, end) { + this.lexer = void 0; + this.start = void 0; + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + + + SourceLocation.range = function range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + }; + + return SourceLocation; +}(); + + +;// CONCATENATED MODULE: ./src/Token.js + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +var Token = /*#__PURE__*/function () { + // don't expand the token + // used in \noexpand + function Token(text, // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.noexpand = void 0; + this.treatAsRelax = void 0; + this.text = text; + this.loc = loc; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + var _proto = Token.prototype; + + _proto.range = function range(endToken, // last token of the range, inclusive + text // the text of the newly constructed token + ) { + return new Token(text, SourceLocation.range(this, endToken)); + }; + + return Token; +}(); +;// CONCATENATED MODULE: ./src/environments/array.js + + + + + + + + + + + + + + + + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + if (nxt === "\\relax") { + // \relax is an artifact of the \cr macro below + parser.consume(); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} + +var validateAmsEnvironmentContext = function validateAmsEnvironmentContext(context) { + var settings = context.parser.settings; + + if (!settings.displayMode) { + throw new src_ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; // autoTag (an argument to parseArray) can be one of three values: +// * undefined: Regular (not-top-level) array; no tags on each row +// * true: Automatic equation numbering, overridable by \tag +// * false: Tags allowed on each row, but no automatic numbering +// This function *doesn't* work with the "split" environment name. + + +function getAutoTag(name) { + if (name.indexOf("ed") === -1) { + return name.indexOf("*") === -1; + } // return undefined; + +} +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter, + addJot = _ref.addJot, + cols = _ref.cols, + arraystretch = _ref.arraystretch, + colSeparationType = _ref.colSeparationType, + autoTag = _ref.autoTag, + singleRow = _ref.singleRow, + emptySingleRow = _ref.emptySingleRow, + maxNumCols = _ref.maxNumCols, + leqno = _ref.leqno; + parser.gullet.beginGroup(); + + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } // Get current arraystretch if it's not set by the environment + + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new src_ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; + var tags = autoTag != null ? [] : undefined; // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent + // whether this row should have an equation number. Simulate this with + // a \@eqnsw macro set to 1 or 0. + + function beginRow() { + if (autoTag) { + parser.gullet.macros.set("\\@eqnsw", "1", true); + } + } + + function endRow() { + if (tags) { + if (parser.gullet.macros.get("\\df@tag")) { + tags.push(parser.subparse([new Token("\\df@tag")])); + parser.gullet.macros.set("\\df@tag", undefined, true); + } else { + tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); + } + } + } + + beginRow(); // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style: style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new src_ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); + } + } + + parser.consume(); + } else if (next === "\\end") { + endRow(); // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. + // NOTE: Currently, `cell` is the last item added into `row`. + + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\\\") { + parser.consume(); + var size = void 0; // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + + rowGaps.push(size ? size.value : null); + endRow(); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + beginRow(); + } else { + throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \cr + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot: addJot, + arraystretch: arraystretch, + body: body, + cols: cols, + rowGaps: rowGaps, + hskipBeforeAndAfter: hskipBeforeAndAfter, + hLinesBeforeRow: hLinesBeforeRow, + colSeparationType: colSeparationType, + tags: tags, + leqno: leqno + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.slice(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var array_htmlBuilder = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + var tagSpans = []; + + if (group.tags && group.tags.some(function (tag) { + return tag; + })) { + // An environment with manual tags and/or automatic equation numbers. + // Create node(s), the latter of which trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + var rw = body[r]; + var shift = rw.pos - offset; + var tag = group.tags[r]; + var tagSpan = void 0; + + if (tag === true) { + // automatic numbering + tagSpan = buildCommon.makeSpan(["eqn-num"], [], options); + } else if (tag === false) { + // \nonumber/\notag or starred environment + tagSpan = buildCommon.makeSpan([], [], options); + } else { + // manual \tag + tagSpan = buildCommon.makeSpan([], buildExpression(tag, options, true), options); + } + + tagSpan.depth = rw.depth; + tagSpan.height = rw.height; + tagSpans.push({ + type: "elem", + elem: tagSpan, + shift: shift + }); + } + } + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = makeEm(totalHeight); + separator.style.borderRightWidth = makeEm(ruleThickness); + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 " + makeEm(-ruleThickness / 2); + + var _shift = totalHeight - offset; + + if (_shift) { + separator.style.verticalAlign = makeEm(-_shift); + } + + cols.push(separator); + } else { + throw new src_ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var _shift2 = row.pos - offset; + + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: _shift2 + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + if (tagSpans.length === 0) { + return buildCommon.makeSpan(["mord"], [body], options); + } else { + var eqnNumCol = buildCommon.makeVList({ + positionType: "individualShift", + children: tagSpans + }, options); + eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); + return buildCommon.makeFragment([body, eqnNumCol]); + } +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var array_mathmlBuilder = function mathmlBuilder(group, options) { + var tbl = []; + var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); + var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); + + for (var i = 0; i < group.body.length; i++) { + var rw = group.body[i]; + var row = []; + + for (var j = 0; j < rw.length; j++) { + row.push(new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(rw[j], options)])); + } + + if (group.tags && group.tags[i]) { + row.unshift(glue); + row.push(glue); + + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + + tbl.push(new mathMLTree.MathNode("mtr", row)); + } + + var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found empirically. They produce an array + // similar to LaTeX and in which content does not interfere with \hlines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var _i = iStart; _i < iEnd; _i++) { + if (cols[_i].type === "align") { + align += alignMap[cols[_i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[_i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i2 = 1; _i2 < _cols.length; _i2++) { + spacing += _i2 % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { + rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i3][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. + + +var alignedHandler = function alignedHandler(context, args) { + if (context.envName.indexOf("ed") === -1) { + validateAmsEnvironmentContext(context); + } + + var cols = []; + var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var isSplit = context.envName === "split"; + var res = parseArray(context.parser, { + cols: cols, + addJot: true, + autoTag: isSplit ? undefined : getAutoTag(context.envName), + emptySingleRow: true, + colSeparationType: separationType, + maxNumCols: isSplit ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + + if (args[0] && args[0].type === "ordgroup") { + var arg0 = ""; + + for (var i = 0; i < args[0].body.length; i++) { + var textord = assertNodeType(args[0].body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i4 = 1; _i4 < row.length; _i4 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i4], "styling"); + var ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i5 = 0; _i5 < numCols; ++_i5) { + var align = "r"; + var pregap = 0; + + if (_i5 % 2 === 1) { + align = "l"; + } else if (_i5 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i5] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols: cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath + + var colAlign = "c"; + var payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + var parser = context.parser; + parser.consumeSpaces(); + + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + + if ("lcr".indexOf(colAlign) === -1) { + throw new src_ParseError("Expected l or c or r", parser.nextToken); + } + + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. + + var numCols = Math.max.apply(Math, [0].concat(res.body.map(function (row) { + return row.length; + }))); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + var res = { + cols: cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body.length > 0 && res.body[0].length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.indexOf("r") > -1 ? "." : "\\{", + right: context.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: undefined + }; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + if (utils.contains(["gather", "gather*"], context.envName)) { + validateAmsEnvironmentContext(context); + } + + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + validateAmsEnvironmentContext(context); + var res = { + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); +defineMacro("\\notag", "\\nonumber"); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + handler: function handler(context, args) { + throw new src_ParseError(context.funcName + " valid only within array environment"); + } +}); +;// CONCATENATED MODULE: ./src/environments.js + +var environments = _environments; +/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below + + +;// CONCATENATED MODULE: ./src/functions/environment.js + + + + // Environment delimiters. HTML/MathML rendering is defined in the corresponding +// defineEnvironment definitions. + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new src_ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!src_environments.hasOwnProperty(envName)) { + throw new src_ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = src_environments[envName]; + + var _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env), + _args = _parser$parseArgument.args, + optArgs = _parser$parseArgument.optArgs; + + var context = { + mode: parser.mode, + envName: envName, + parser: parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } // $FlowFixMe, "environment" handler returns an environment ParseNode + + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup: nameGroup + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/font.js +// TODO(kevinb): implement \\sl and \\sc + + + + + + +var font_htmlBuilder = function htmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +var font_mathmlBuilder = function mathmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildMathML_buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + allowedInArgument: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = normalizeArgument(args[0]); + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body: body + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body: body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName, + breakOnTokenText = _ref3.breakOnTokenText; + var mode = parser.mode; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body: body + } + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/genfrac.js + + + + + + + + + + + +var adjustStyle = function adjustStyle(size, originalStyle) { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY; + } else if (size === "text" && style.size === src_Style.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = src_Style.TEXT; + } else if (size === "script") { + style = src_Style.SCRIPT; + } else if (size === "scriptscript") { + style = src_Style.SCRIPTSCRIPT; + } + + return style; +}; + +var genfrac_htmlBuilder = function htmlBuilder(group, options) { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildGroup(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildGroup(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === src_Style.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === src_Style.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === src_Style.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(src_Style.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var genfrac_mathmlBuilder = function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", makeEm(ruleWidth)); + } + + var style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + props: { + numArgs: 2, + allowedInArgument: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: false, + numer: numer, + denom: denom, + hasBarLine: hasBarLine, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size, + barSize: null + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); +defineFunction({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var numer = args[0]; + var denom = args[1]; + return { + type: "genfrac", + mode: parser.mode, + continued: true, + numer: numer, + denom: denom, + hasBarLine: true, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName, + token = _ref3.token; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith: replaceWith, + token: token + }; + } +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + handler: function handler(_ref4, args) { + var parser = _ref4.parser; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = normalizeArgument(args[0]); + var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + var rightNode = normalizeArgument(args[1]); + var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = args[3]; + + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + handler: function handler(_ref5, args) { + var parser = _ref5.parser, + funcName = _ref5.funcName, + token = _ref5.token; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token: token + }; + } +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: function handler(_ref6, args) { + var parser = _ref6.parser, + funcName = _ref6.funcName; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/horizBrace.js + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +var horizBrace_htmlBuilder = function htmlBuilder(grp, options) { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup(grp.sup, options.havingStyle(style.sup()), options) : buildGroup(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var horizBrace_mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + htmlBuilder: horizBrace_htmlBuilder, + mathmlBuilder: horizBrace_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/href.js + + + + + + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href: href, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href: href, + body: ordargument(body) + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/hbox.js + + + + + // \hbox is provided for compatibility with LaTeX \vcenter. +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", buildMathML_buildExpression(group.body, options)); + } +}); +;// CONCATENATED MODULE: ./src/functions/html.js + + + + + + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName, + token = _ref.token; + var value = assertNodeType(args[0], "raw").string; + var body = args[1]; + + if (parser.settings.strict) { + parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + } + + var trustContext; + var attributes = {}; + + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + + case "\\htmlData": + { + var data = value.split(","); + + for (var i = 0; i < data.length; i++) { + var keyVal = data[i].split("="); + + if (keyVal.length !== 2) { + throw new src_ParseError("Error parsing key-value for \\htmlData"); + } + + attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); + } + + trustContext = { + command: "\\htmlData", + attributes: attributes + }; + break; + } + + default: + throw new Error("Unrecognized html command"); + } + + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + + return { + type: "html", + mode: parser.mode, + attributes: attributes, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options, false); + var classes = ["enclosing"]; + + if (group.attributes.class) { + classes.push.apply(classes, group.attributes.class.trim().split(/\s+/)); + } + + var span = buildCommon.makeSpan(classes, elements, options); + + for (var attr in group.attributes) { + if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { + span.setAttribute(attr, group.attributes[attr]); + } + } + + return span; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/htmlmathml.js + + + + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.mathml, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/includegraphics.js + + + + + + + +var sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + } + + var width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + var style = { + height: makeEm(height + depth) + }; + + if (width > 0) { + style.width = makeEm(width); + } + + if (depth > 0) { + style.verticalAlign = makeEm(-depth); + } + + var node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + node.setAttribute("valign", makeEm(-depth)); + } + + node.setAttribute("height", makeEm(height + depth)); + + if (group.width.number > 0) { + var width = calculateSize(group.width, options); + node.setAttribute("width", makeEm(width)); + } + + node.setAttribute("src", group.src); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/kern.js +// Horizontal spacing commands + + + + + // TODO: \hskip and \mskip should support plus and minus in lengths + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } +}); +;// CONCATENATED MODULE: ./src/functions/lap.js +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = makeEm(node.height + node.depth); + + if (node.depth) { + strut.style.verticalAlign = makeEm(-node.depth); + } + + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + + node = buildCommon.makeSpan(["thinbox"], [node], options); + return buildCommon.makeSpan(["mord", "vbox"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/math.js + + // Switching from text mode back to math mode + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(_ref, args) { + var funcName = _ref.funcName, + parser = _ref.parser; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body: body + }; + } +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(context, args) { + throw new src_ParseError("Mismatched " + context.funcName); + } +}); +;// CONCATENATED MODULE: ./src/functions/mathchoice.js + + + + + + +var chooseMathStyle = function chooseMathStyle(group, options) { + switch (options.style.size) { + case src_Style.DISPLAY.size: + return group.display; + + case src_Style.TEXT.size: + return group.text; + + case src_Style.SCRIPT.size: + return group.script; + + case src_Style.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + var elements = buildExpression(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); +;// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js + + + + // For an operator with limits, assemble the base, sup, and sub into a span. + +var assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) { + base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildGroup(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem: elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildGroup(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = makeEm(slant); + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); +}; +;// CONCATENATED MODULE: ./src/functions/op.js +// Limits, symbols + + + + + + + + + + + +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var op_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.slice(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildExpression(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = makeEm(baseShift); + } + + return base; + } +}; + +var op_mathmlBuilder = function mathmlBuilder(group, options) { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildMathML_buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22C0": "\\bigwedge", + "\u22C1": "\\bigvee", + "\u22C2": "\\bigcap", + "\u22C3": "\\bigcup", + "\u2A00": "\\bigodot", + "\u2A01": "\\bigoplus", + "\u2A02": "\\bigotimes", + "\u2A04": "\\biguplus", + "\u2A06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"], + props: { + numArgs: 0 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222B": "\\int", + "\u222C": "\\iint", + "\u222D": "\\iiint", + "\u222E": "\\oint", + "\u222F": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + handler: function handler(_ref4) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"], + props: { + numArgs: 0 + }, + handler: function handler(_ref5) { + var parser = _ref5.parser, + funcName = _ref5.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); +;// CONCATENATED MODULE: ./src/functions/operatorname.js + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +var operatorname_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(function (child) { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildExpression(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var operatorname_mathmlBuilder = function mathmlBuilder(group, options) { + // The steps taken here are similar to the html version. + var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) {// Do nothing + } else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(function (node) { + return node.toText(); + }).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mrow", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: operatorname_htmlBuilder, + mathmlBuilder: operatorname_mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); +;// CONCATENATED MODULE: ./src/functions/ordgroup.js + + + + +defineFunctionBuilders({ + type: "ordgroup", + htmlBuilder: function htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } +}); +;// CONCATENATED MODULE: ./src/functions/overline.js + + + + + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/phantom.js + + + + + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/raisebox.js + + + + + + + // Box manipulation + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = buildGroup(group.body, options); + var dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/relax.js + +defineFunction({ + type: "internal", + names: ["\\relax"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref) { + var parser = _ref.parser; + return { + type: "internal", + mode: parser.mode + }; + } +}); +;// CONCATENATED MODULE: ./src/functions/rule.js + + + + + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = makeEm(width); + rule.style.borderTopWidth = makeEm(height); + rule.style.bottom = makeEm(shift); // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", makeEm(width)); + rule.setAttribute("height", makeEm(height)); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", makeEm(shift)); + } else { + wrapper.setAttribute("height", makeEm(shift)); + wrapper.setAttribute("depth", makeEm(-shift)); + } + + wrapper.setAttribute("voffset", makeEm(shift)); + return wrapper; + } +}); +;// CONCATENATED MODULE: ./src/functions/sizing.js + + + + + + +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var sizing_htmlBuilder = function htmlBuilder(group, options) { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body: body + }; + }, + htmlBuilder: sizing_htmlBuilder, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = options.havingSize(group.size); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/smash.js +// smash, with optional [tb], as in AMS + + + + + + +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body: body, + smashHeight: smashHeight, + smashDepth: smashDepth + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildGroup(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/sqrt.js + + + + + + + + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body: body, + index: index + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < src_Style.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options), + img = _delimiter$sqrtImage.span, + ruleWidth = _delimiter$sqrtImage.ruleWidth, + advanceWidth = _delimiter$sqrtImage.advanceWidth; + + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT); + var rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = group.body, + index = group.index; + return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]); + } +}); +;// CONCATENATED MODULE: ./src/functions/styling.js + + + + + +var styling_styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style: style, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/supsub.js + + + + + + + + + + + + + + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? op_htmlBuilder : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits); + + return _delegate ? operatorname_htmlBuilder : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? horizBrace_htmlBuilder : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + htmlBuilder: function htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var valueBase = group.base, + valueSup = group.sup, + valueSub = group.sub; + var base = buildGroup(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildGroup(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === src_Style.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = makeEm(-base.italic); + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight: marginRight, + marginLeft: marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft: marginLeft, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight: marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildMathML_buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildMathML_buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildMathML_buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + return new mathMLTree.MathNode(nodeType, children); + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsOp.js + + + + // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js. + +defineFunctionBuilders({ + type: "atom", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsOrd.js + + + + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + var variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +defineFunctionBuilders({ + type: "textord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = makeText(group.text, group.mode, options); + var variant = getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js + + + + // A map of CSS-based spacing functions to their CSS class. + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + htmlBuilder: function htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/tag.js + + + + +var pad = function pad() { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + mathmlBuilder: function mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } +}); +;// CONCATENATED MODULE: ./src/functions/text.js + + + + // Non-mathy text, possibly in a font + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = function optionsWithFont(group, options) { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildExpression(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], inner, newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } +}); +;// CONCATENATED MODULE: ./src/functions/underline.js + + + + + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildGroup(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +;// CONCATENATED MODULE: ./src/functions/vcenter.js + + + + + // \vcenter: Vertically center the argument group on the math axis. + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = buildGroup(group.body, options); + var axisHeight = options.fontMetrics().axisHeight; + var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return buildCommon.makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + return new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)], ["vcenter"]); + } +}); +;// CONCATENATED MODULE: ./src/functions/verb.js + + + + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new src_ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + htmlBuilder: function htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = function makeVerb(group) { + return group.body.replace(/ /g, group.star ? "\u2423" : '\xA0'); +}; +;// CONCATENATED MODULE: ./src/functions.js +/** Include this to ensure that all functions are defined. */ + +var functions = _functions; +/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with +// that object in this file instead of relying on side-effects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./src/Lexer.js +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + + + + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +var combiningDiacriticalMarkString = "[\u0300-\u036F]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +var Lexer = /*#__PURE__*/function () { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + function Lexer(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + + }; + } + + var _proto = Lexer.prototype; + + _proto.setCatcode = function setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + ; + + _proto.lex = function lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + }; + + return Lexer; +}(); + + +;// CONCATENATED MODULE: ./src/Namespace.js +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ + + +var Namespace = /*#__PURE__*/function () { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + function Namespace(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + var _proto = Namespace.prototype; + + _proto.beginGroup = function beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + ; + + _proto.endGroup = function endGroup() { + if (this.undefStack.length === 0) { + throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] == null) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + ; + + _proto.has = function has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + ; + + _proto.get = function get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. + */ + ; + + _proto.set = function set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + if (value == null) { + delete this.current[name]; + } else { + this.current[name] = value; + } + }; + + return Namespace; +}(); + + +;// CONCATENATED MODULE: ./src/macros.js +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +// Export global macros object from defineMacro + +var macros = _macros; +/* harmony default export */ var src_macros = (macros); + + + + + + ////////////////////////////////////////////////////////////////////// +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + var t = context.popToken(); + + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + var t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + + return { + tokens: [t], + numArgs: 0 + }; +}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + context.consumeSpaces(); + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new src_ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new src_ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var newcommand = function newcommand(context, existsOK, nonexistsOK) { + var arg = context.consumeArg().tokens; + + if (arg.length !== 1) { + throw new src_ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArg().tokens; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new src_ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs: numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", function (context) { + return newcommand(context, false, true); +}); +defineMacro("\\renewcommand", function (context) { + return newcommand(context, true, false); +}); +defineMacro("\\providecommand", function (context) { + return newcommand(context, true, true); +}); // terminal (console) tools + +defineMacro("\\message", function (context) { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.log(arg.reverse().map(function (token) { + return token.text; + }).join("")); + return ''; +}); +defineMacro("\\errmessage", function (context) { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.error(arg.reverse().map(function (token) { + return token.text; + }).join("")); + return ''; +}); +defineMacro("\\show", function (context) { + var tok = context.popToken(); + var name = tok.text; // eslint-disable-next-line no-console + + console.log(tok, context.macros.get(name), src_functions[name], src_symbols.math[name], src_symbols.text[name]); + return ''; +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\xB7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 + +defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 + +defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\xA9", "\\copyright"); +defineMacro("\xAE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. + +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22EE", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.slice(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in src_symbols.math) { + if (utils.contains(['bin', 'rel'], src_symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", function (context) { + if (context.macros.get("\\df@tag")) { + throw new src_ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} + +defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = makeEm(fontMetricsData["Main-Regular"]["T".charCodeAt(0)][1] - 0.7 * fontMetricsData["Main-Regular"]["A".charCodeAt(0)][1]); +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// From amsopn.sty + +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}"); +defineMacro("\u27E6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. + +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); + +var braketHelper = function braketHelper(one) { + return function (context) { + var left = context.consumeArg().tokens; + var middle = context.consumeArg().tokens; + var middleDouble = context.consumeArg().tokens; + var right = context.consumeArg().tokens; + var oldMiddle = context.macros.get("|"); + var oldMiddleDouble = context.macros.get("\\|"); + context.macros.beginGroup(); + + var midMacro = function midMacro(double) { + return function (context) { + if (one) { + // Only modify the first instance of | or \| + context.macros.set("|", oldMiddle); + + if (middleDouble.length) { + context.macros.set("\\|", oldMiddleDouble); + } + } + + var doubled = double; + + if (!double && middleDouble.length) { + // Mimic \@ifnextchar + var nextToken = context.future(); + + if (nextToken.text === "|") { + context.popToken(); + doubled = true; + } + } + + return { + tokens: doubled ? middleDouble : middle, + numArgs: 0 + }; + }; + }; + + context.macros.set("|", midMacro(false)); + + if (middleDouble.length) { + context.macros.set("\\|", midMacro(true)); + } + + var arg = context.consumeArg().tokens; + var expanded = context.expandTokens([].concat(right, arg, left)); + context.macros.endGroup(); + return { + tokens: expanded.reverse(), + numArgs: 0 + }; + }; +}; + +defineMacro("\\bra@ket", braketHelper(false)); +defineMacro("\\bra@set", braketHelper(true)); +defineMacro("\\Braket", "\\bra@ket{\\left\\langle}" + "{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); +defineMacro("\\Set", "\\bra@set{\\left\\{\\:}" + "{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); +defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); // has no support for special || or \| +////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx + +defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); +;// CONCATENATED MODULE: ./src/MacroExpander.js +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ + + + + + + + +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; + +var MacroExpander = /*#__PURE__*/function () { + function MacroExpander(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(src_macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + var _proto = MacroExpander.prototype; + + _proto.feed = function feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + ; + + _proto.beginGroup = function beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + ; + + _proto.endGroup = function endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + ; + + _proto.endGroups = function endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + ; + + _proto.future = function future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + ; + + _proto.popToken = function popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + ; + + _proto.pushToken = function pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + ; + + _proto.pushTokens = function pushTokens(tokens) { + var _this$stack; + + (_this$stack = this.stack).push.apply(_this$stack, tokens); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + ; + + _proto.scanArgument = function scanArgument(isOptional) { + var start; + var end; + var tokens; + + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + + if (this.future().text !== "[") { + return null; + } + + start = this.popToken(); // don't include [ in tokens + + var _this$consumeArg = this.consumeArg(["]"]); + + tokens = _this$consumeArg.tokens; + end = _this$consumeArg.end; + } else { + var _this$consumeArg2 = this.consumeArg(); + + tokens = _this$consumeArg2.tokens; + start = _this$consumeArg2.start; + end = _this$consumeArg2.end; + } // indicate the end of an argument + + + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return start.range(end, ""); + } + /** + * Consume all following space tokens, without expansion. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + ; + + _proto.consumeArg = function consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + var tokens = []; + var isDelimited = delims && delims.length > 0; + + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + + var start = this.future(); + var tok; + var depth = 0; + var match = 0; + + do { + tok = this.popToken(); + tokens.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + + if (depth === -1) { + throw new src_ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new src_ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + + + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + + tokens.reverse(); // to fit in with stack order + + return { + tokens: tokens, + start: start, + end: tok + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + ; + + _proto.consumeArgs = function consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new src_ParseError("The length of delimiters doesn't match the number of args!"); + } + + var delims = delimiters[0]; + + for (var i = 0; i < delims.length; i++) { + var tok = this.popToken(); + + if (delims[i] !== tok.text) { + throw new src_ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + + var args = []; + + for (var _i = 0; _i < numArgs; _i++) { + args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order, and the number of such tokens will be + * returned. This number might be zero or positive. + * + * If not, the return value is `false`, and the next token remains at the + * top of the stack. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty (in case of empty expansion + * and no other tokens). + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + ; + + _proto.expandOnce = function expandOnce(expandableOnly) { + var topToken = this.popToken(); + var name = topToken.text; + var expansion = !topToken.noexpand ? this._getExpansion(name) : null; + + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new src_ParseError("Undefined control sequence: " + name); + } + + this.pushToken(topToken); + return false; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + var tokens = expansion.tokens; + var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new src_ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + var _tokens; + + // replace the placeholder with the indicated argument + (_tokens = tokens).splice.apply(_tokens, [i, 2].concat(args[+tok.text - 1])); + } else { + throw new src_ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens.length; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + ; + + _proto.expandAfterFuture = function expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + ; + + _proto.expandNextToken = function expandNextToken() { + for (;;) { + if (this.expandOnce() === false) { + // fully expanded + var token = this.stack.pop(); // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + + if (token.treatAsRelax) { + token.text = "\\relax"; + } + + return token; + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacro = function expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + /** + * Fully expand the given token stream and return the resulting list of + * tokens. Note that the input tokens are in reverse order, but the + * output tokens are in forward order. + */ + ; + + _proto.expandTokens = function expandTokens(tokens) { + var output = []; + var oldStackLength = this.stack.length; + this.pushTokens(tokens); + + while (this.stack.length > oldStackLength) { + // Expand only expandable tokens + if (this.expandOnce(true) === false) { + // fully expanded + var token = this.stack.pop(); + + if (token.treatAsRelax) { + // the expansion of \noexpand is the token itself + token.noexpand = false; + token.treatAsRelax = false; + } + + output.push(token); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacroAsText = function expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(function (token) { + return token.text; + }).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + ; + + _proto._getExpansion = function _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens: tokens, + numArgs: numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + ; + + _proto.isDefined = function isDefined(name) { + return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + /** + * Determine whether a command is expandable. + */ + ; + + _proto.isExpandable = function isExpandable(name) { + var macro = this.macros.get(name); + return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : src_functions.hasOwnProperty(name) && !src_functions[name].primitive; + }; + + return MacroExpander; +}(); + + +;// CONCATENATED MODULE: ./src/unicodeSupOrSub.js +// Helpers for Parser.js handling of Unicode (sub|super)script characters. +var unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/; +var uSubsAndSups = Object.freeze({ + '₊': '+', + '₋': '-', + '₌': '=', + '₍': '(', + '₎': ')', + '₀': '0', + '₁': '1', + '₂': '2', + '₃': '3', + '₄': '4', + '₅': '5', + '₆': '6', + '₇': '7', + '₈': '8', + '₉': '9', + "\u2090": 'a', + "\u2091": 'e', + "\u2095": 'h', + "\u1D62": 'i', + "\u2C7C": 'j', + "\u2096": 'k', + "\u2097": 'l', + "\u2098": 'm', + "\u2099": 'n', + "\u2092": 'o', + "\u209A": 'p', + "\u1D63": 'r', + "\u209B": 's', + "\u209C": 't', + "\u1D64": 'u', + "\u1D65": 'v', + "\u2093": 'x', + "\u1D66": 'β', + "\u1D67": 'γ', + "\u1D68": 'ρ', + "\u1D69": "\u03D5", + "\u1D6A": 'χ', + '⁺': '+', + '⁻': '-', + '⁼': '=', + '⁽': '(', + '⁾': ')', + '⁰': '0', + '¹': '1', + '²': '2', + '³': '3', + '⁴': '4', + '⁵': '5', + '⁶': '6', + '⁷': '7', + '⁸': '8', + '⁹': '9', + "\u1D2C": 'A', + "\u1D2E": 'B', + "\u1D30": 'D', + "\u1D31": 'E', + "\u1D33": 'G', + "\u1D34": 'H', + "\u1D35": 'I', + "\u1D36": 'J', + "\u1D37": 'K', + "\u1D38": 'L', + "\u1D39": 'M', + "\u1D3A": 'N', + "\u1D3C": 'O', + "\u1D3E": 'P', + "\u1D3F": 'R', + "\u1D40": 'T', + "\u1D41": 'U', + "\u2C7D": 'V', + "\u1D42": 'W', + "\u1D43": 'a', + "\u1D47": 'b', + "\u1D9C": 'c', + "\u1D48": 'd', + "\u1D49": 'e', + "\u1DA0": 'f', + "\u1D4D": 'g', + "\u02B0": 'h', + "\u2071": 'i', + "\u02B2": 'j', + "\u1D4F": 'k', + "\u02E1": 'l', + "\u1D50": 'm', + "\u207F": 'n', + "\u1D52": 'o', + "\u1D56": 'p', + "\u02B3": 'r', + "\u02E2": 's', + "\u1D57": 't', + "\u1D58": 'u', + "\u1D5B": 'v', + "\u02B7": 'w', + "\u02E3": 'x', + "\u02B8": 'y', + "\u1DBB": 'z', + "\u1D5D": 'β', + "\u1D5E": 'γ', + "\u1D5F": 'δ', + "\u1D60": "\u03D5", + "\u1D61": 'χ', + "\u1DBF": 'θ' +}); +;// CONCATENATED MODULE: ./src/Parser.js +/* eslint no-constant-condition:0 */ + + + + + + + + + + + // Pre-evaluate both modules as unicodeSymbols require String.normalize() + +var unicodeAccents = { + "́": { + "text": "\\'", + "math": "\\acute" + }, + "̀": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "̄": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "̌": { + "text": "\\v", + "math": "\\check" + }, + "̂": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "̊": { + "text": "\\r", + "math": "\\mathring" + }, + "̋": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +var unicodeSymbols = { + "á": "á", + "à": "à", + "ä": "ä", + "ǟ": "ǟ", + "ã": "ã", + "ā": "ā", + "ă": "ă", + "ắ": "ắ", + "ằ": "ằ", + "ẵ": "ẵ", + "ǎ": "ǎ", + "â": "â", + "ấ": "ấ", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "ǡ": "ǡ", + "å": "å", + "ǻ": "ǻ", + "ḃ": "ḃ", + "ć": "ć", + "ḉ": "ḉ", + "č": "č", + "ĉ": "ĉ", + "ċ": "ċ", + "ç": "ç", + "ď": "ď", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "é", + "è": "è", + "ë": "ë", + "ẽ": "ẽ", + "ē": "ē", + "ḗ": "ḗ", + "ḕ": "ḕ", + "ĕ": "ĕ", + "ḝ": "ḝ", + "ě": "ě", + "ê": "ê", + "ế": "ế", + "ề": "ề", + "ễ": "ễ", + "ė": "ė", + "ȩ": "ȩ", + "ḟ": "ḟ", + "ǵ": "ǵ", + "ḡ": "ḡ", + "ğ": "ğ", + "ǧ": "ǧ", + "ĝ": "ĝ", + "ġ": "ġ", + "ģ": "ģ", + "ḧ": "ḧ", + "ȟ": "ȟ", + "ĥ": "ĥ", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "í", + "ì": "ì", + "ï": "ï", + "ḯ": "ḯ", + "ĩ": "ĩ", + "ī": "ī", + "ĭ": "ĭ", + "ǐ": "ǐ", + "î": "î", + "ǰ": "ǰ", + "ĵ": "ĵ", + "ḱ": "ḱ", + "ǩ": "ǩ", + "ķ": "ķ", + "ĺ": "ĺ", + "ľ": "ľ", + "ļ": "ļ", + "ḿ": "ḿ", + "ṁ": "ṁ", + "ń": "ń", + "ǹ": "ǹ", + "ñ": "ñ", + "ň": "ň", + "ṅ": "ṅ", + "ņ": "ņ", + "ó": "ó", + "ò": "ò", + "ö": "ö", + "ȫ": "ȫ", + "õ": "õ", + "ṍ": "ṍ", + "ṏ": "ṏ", + "ȭ": "ȭ", + "ō": "ō", + "ṓ": "ṓ", + "ṑ": "ṑ", + "ŏ": "ŏ", + "ǒ": "ǒ", + "ô": "ô", + "ố": "ố", + "ồ": "ồ", + "ỗ": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "ő": "ő", + "ṕ": "ṕ", + "ṗ": "ṗ", + "ŕ": "ŕ", + "ř": "ř", + "ṙ": "ṙ", + "ŗ": "ŗ", + "ś": "ś", + "ṥ": "ṥ", + "š": "š", + "ṧ": "ṧ", + "ŝ": "ŝ", + "ṡ": "ṡ", + "ş": "ş", + "ẗ": "ẗ", + "ť": "ť", + "ṫ": "ṫ", + "ţ": "ţ", + "ú": "ú", + "ù": "ù", + "ü": "ü", + "ǘ": "ǘ", + "ǜ": "ǜ", + "ǖ": "ǖ", + "ǚ": "ǚ", + "ũ": "ũ", + "ṹ": "ṹ", + "ū": "ū", + "ṻ": "ṻ", + "ŭ": "ŭ", + "ǔ": "ǔ", + "û": "û", + "ů": "ů", + "ű": "ű", + "ṽ": "ṽ", + "ẃ": "ẃ", + "ẁ": "ẁ", + "ẅ": "ẅ", + "ŵ": "ŵ", + "ẇ": "ẇ", + "ẘ": "ẘ", + "ẍ": "ẍ", + "ẋ": "ẋ", + "ý": "ý", + "ỳ": "ỳ", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "ȳ", + "ŷ": "ŷ", + "ẏ": "ẏ", + "ẙ": "ẙ", + "ź": "ź", + "ž": "ž", + "ẑ": "ẑ", + "ż": "ż", + "Á": "Á", + "À": "À", + "Ä": "Ä", + "Ǟ": "Ǟ", + "Ã": "Ã", + "Ā": "Ā", + "Ă": "Ă", + "Ắ": "Ắ", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ǎ": "Ǎ", + "Â": "Â", + "Ấ": "Ấ", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ǡ": "Ǡ", + "Å": "Å", + "Ǻ": "Ǻ", + "Ḃ": "Ḃ", + "Ć": "Ć", + "Ḉ": "Ḉ", + "Č": "Č", + "Ĉ": "Ĉ", + "Ċ": "Ċ", + "Ç": "Ç", + "Ď": "Ď", + "Ḋ": "Ḋ", + "Ḑ": "Ḑ", + "É": "É", + "È": "È", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ē": "Ē", + "Ḗ": "Ḗ", + "Ḕ": "Ḕ", + "Ĕ": "Ĕ", + "Ḝ": "Ḝ", + "Ě": "Ě", + "Ê": "Ê", + "Ế": "Ế", + "Ề": "Ề", + "Ễ": "Ễ", + "Ė": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ǵ": "Ǵ", + "Ḡ": "Ḡ", + "Ğ": "Ğ", + "Ǧ": "Ǧ", + "Ĝ": "Ĝ", + "Ġ": "Ġ", + "Ģ": "Ģ", + "Ḧ": "Ḧ", + "Ȟ": "Ȟ", + "Ĥ": "Ĥ", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Í": "Í", + "Ì": "Ì", + "Ï": "Ï", + "Ḯ": "Ḯ", + "Ĩ": "Ĩ", + "Ī": "Ī", + "Ĭ": "Ĭ", + "Ǐ": "Ǐ", + "Î": "Î", + "İ": "İ", + "Ĵ": "Ĵ", + "Ḱ": "Ḱ", + "Ǩ": "Ǩ", + "Ķ": "Ķ", + "Ĺ": "Ĺ", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Ḿ": "Ḿ", + "Ṁ": "Ṁ", + "Ń": "Ń", + "Ǹ": "Ǹ", + "Ñ": "Ñ", + "Ň": "Ň", + "Ṅ": "Ṅ", + "Ņ": "Ņ", + "Ó": "Ó", + "Ò": "Ò", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "Ṍ", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "Ō": "Ō", + "Ṓ": "Ṓ", + "Ṑ": "Ṑ", + "Ŏ": "Ŏ", + "Ǒ": "Ǒ", + "Ô": "Ô", + "Ố": "Ố", + "Ồ": "Ồ", + "Ỗ": "Ỗ", + "Ȯ": "Ȯ", + "Ȱ": "Ȱ", + "Ő": "Ő", + "Ṕ": "Ṕ", + "Ṗ": "Ṗ", + "Ŕ": "Ŕ", + "Ř": "Ř", + "Ṙ": "Ṙ", + "Ŗ": "Ŗ", + "Ś": "Ś", + "Ṥ": "Ṥ", + "Š": "Š", + "Ṧ": "Ṧ", + "Ŝ": "Ŝ", + "Ṡ": "Ṡ", + "Ş": "Ş", + "Ť": "Ť", + "Ṫ": "Ṫ", + "Ţ": "Ţ", + "Ú": "Ú", + "Ù": "Ù", + "Ü": "Ü", + "Ǘ": "Ǘ", + "Ǜ": "Ǜ", + "Ǖ": "Ǖ", + "Ǚ": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "Ṹ", + "Ū": "Ū", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ǔ": "Ǔ", + "Û": "Û", + "Ů": "Ů", + "Ű": "Ű", + "Ṽ": "Ṽ", + "Ẃ": "Ẃ", + "Ẁ": "Ẁ", + "Ẅ": "Ẅ", + "Ŵ": "Ŵ", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ý": "Ý", + "Ỳ": "Ỳ", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "Ȳ", + "Ŷ": "Ŷ", + "Ẏ": "Ẏ", + "Ź": "Ź", + "Ž": "Ž", + "Ẑ": "Ẑ", + "Ż": "Ż", + "ά": "ά", + "ὰ": "ὰ", + "ᾱ": "ᾱ", + "ᾰ": "ᾰ", + "έ": "έ", + "ὲ": "ὲ", + "ή": "ή", + "ὴ": "ὴ", + "ί": "ί", + "ὶ": "ὶ", + "ϊ": "ϊ", + "ΐ": "ΐ", + "ῒ": "ῒ", + "ῑ": "ῑ", + "ῐ": "ῐ", + "ό": "ό", + "ὸ": "ὸ", + "ύ": "ύ", + "ὺ": "ὺ", + "ϋ": "ϋ", + "ΰ": "ΰ", + "ῢ": "ῢ", + "ῡ": "ῡ", + "ῠ": "ῠ", + "ώ": "ώ", + "ὼ": "ὼ", + "Ύ": "Ύ", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "Ῡ": "Ῡ", + "Ῠ": "Ῠ", + "Ώ": "Ώ", + "Ὼ": "Ὼ" +}; + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +var Parser = /*#__PURE__*/function () { + function Parser(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + var _proto = Parser.prototype; + + _proto.expect = function expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + ; + + _proto.consume = function consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + ; + + _proto.fetch = function fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + ; + + _proto.parse = function parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + } + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + ; + + _proto.subparse = function subparse(tokens) { + // Save the next token from the current job. + var oldToken = this.nextToken; + this.consume(); // Run the new job, terminating it with an excess '}' + + this.gullet.pushToken(new Token("}")); + this.gullet.pushTokens(tokens); + var parse = this.parseExpression(false); + this.expect("}"); // Restore the next token from the current job. + + this.nextToken = oldToken; + return parse; + }; + + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precedence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + _proto.parseExpression = function parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } else if (atom.type === "internal") { + continue; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + ; + + _proto.handleInfixNodes = function handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + if (body[i].type === "infix") { + if (overIndex !== -1) { + throw new src_ParseError("only one infix operator per group", body[i].token); + } + + overIndex = i; + funcName = body[i].replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } + /** + * Handle a subscript or superscript with nice errors. + */ + ; + + _proto.handleSupSubscript = function handleSupSubscript(name // For error reporting. + ) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + var group = this.parseGroup(name); + + if (!group) { + throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + ; + + _proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + ; + + _proto.parseAtom = function parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + var limits = lex.text === "\\limits"; + base.limits = limits; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new src_ParseError("Limit controls must follow a math operator", lex); + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new src_ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else if (uSubsAndSups[lex.text]) { + // A Unicode subscript or superscript character. + // We treat these similarly to the unicode-math package. + // So we render a string of Unicode (sub|super)scripts the + // same as a (sub|super)script of regular characters. + var str = uSubsAndSups[lex.text]; + var isSub = unicodeSubRegEx.test(lex.text); + this.consume(); // Continue fetching tokens to fill out the string. + + while (true) { + var token = this.fetch().text; + + if (!uSubsAndSups[token]) { + break; + } + + if (unicodeSubRegEx.test(token) !== isSub) { + break; + } + + this.consume(); + str += uSubsAndSups[token]; + } // Now create a (sub|super)script. + + + var body = new Parser(str, this.settings).parse(); + + if (isSub) { + subscript = { + type: "ordgroup", + mode: "math", + body: body + }; + } else { + superscript = { + type: "ordgroup", + mode: "math", + body: body + }; + } + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + ; + + _proto.parseFunction = function parseFunction(breakOnTokenText, name // For determining its context + ) { + var token = this.fetch(); + var func = token.text; + var funcData = src_functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new src_ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new src_ParseError("Can't use function '" + func + "' in math mode", token); + } + + var _this$parseArguments = this.parseArguments(func, funcData), + args = _this$parseArguments.args, + optArgs = _this$parseArguments.optArgs; + + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + ; + + _proto.callFunction = function callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token: token, + breakOnTokenText: breakOnTokenText + }; + var func = src_functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new src_ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + ; + + _proto.parseArguments = function parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + + if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new src_ParseError("Null argument, please report this as a bug"); + } + } + + return { + args: args, + optArgs: optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + ; + + _proto.parseGroupOfType = function parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + + case "size": + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional); + + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + } : null; + } + + case "raw": + { + var token = this.parseStringGroup("raw", optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + + case "primitive": + { + if (optional) { + throw new src_ParseError("A primitive argument cannot be optional"); + } + + var _group = this.parseGroup(name); + + if (_group == null) { + throw new src_ParseError("Expected group as " + name, this.fetch()); + } + + return _group; + } + + case "original": + case null: + case undefined: + return this.parseArgumentGroup(optional); + + default: + throw new src_ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + ; + + _proto.parseStringGroup = function parseStringGroup(modeName, // Used to describe the mode in error messages. + optional) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + + this.consume(); // consume the end of the argument + + argToken.text = str; + return argToken; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + ; + + _proto.parseRegexGroup = function parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + ; + + _proto.parseColorGroup = function parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (res == null) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color: color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + ; + + _proto.parseSizeGroup = function parseSizeGroup(optional) { + var res; + var isBlank = false; // don't expand before parseStringGroup + + this.gullet.consumeSpaces(); + + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank: isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + ; + + _proto.parseUrlGroup = function parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + + this.gullet.lexer.setCatcode("~", 12); // other character + + var res = this.parseStringGroup("url", optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + + this.gullet.lexer.setCatcode("~", 13); // active character + + if (res == null) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url: url + }; + } + /** + * Parses an argument with the mode specified. + */ + ; + + _proto.parseArgumentGroup = function parseArgumentGroup(optional, mode) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var outerMode = this.mode; + + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + + this.gullet.beginGroup(); + var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end + + this.expect("EOF"); // expect the end of the argument + + this.gullet.endGroup(); + var result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + + return result; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + ; + + _proto.parseGroup = function parseGroup(name, // For error reporting. + breakOnTokenText) { + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new src_ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + ; + + _proto.formLigatures = function formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + ; + + _proto.parseSymbol = function parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new src_ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star: star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.slice(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = "\u0131"; // dotless i, in math and text mode + } else if (text === 'j') { + text = "\u0237"; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (src_symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = src_symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family: family, + loc: loc, + text: text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc: loc, + text: text + }; + } // $FlowFixMe + + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text: text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + + if (!command) { + throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + // $FlowFixMe + base: symbol + }; + } + } // $FlowFixMe + + + return symbol; + }; + + return Parser; +}(); + +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + +;// CONCATENATED MODULE: ./src/parseTree.js +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + + + + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). + + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new src_ParseError("\\tag works only in display equations"); + } + + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.subparse([new Token("\\df@tag")]) + }]; + } + + return tree; +}; + +/* harmony default export */ var src_parseTree = (parseTree); +;// CONCATENATED MODULE: ./katex.js +/* eslint no-console:0 */ + +/** + * This is the main entry point for KaTeX. Here, we expose functions for + * rendering expressions either to DOM nodes or to markup strings. + * + * We also expose the ParseError class to check if errors thrown from KaTeX are + * errors in the expression, or errors in javascript handling. + */ + + + + + + + + + + + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new src_ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings(options); + return src_parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof src_ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +/* harmony default export */ var katex = ({ + /** + * Current KaTeX version + */ + version: "0.16.8", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render: render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString: renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError: src_ParseError, + + /** + * The shema of Settings + */ + SETTINGS_SCHEMA: SETTINGS_SCHEMA, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new function to builtin function list, + * which directly produce parse tree elements + * and have their own html/mathml builders + */ + __defineFunction: defineFunction, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span: Span, + Anchor: Anchor, + SymbolNode: SymbolNode, + SvgNode: SvgNode, + PathNode: PathNode, + LineNode: LineNode + } +}); +;// CONCATENATED MODULE: ./katex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2] + * doesn't support CSS modules natively, a separate entry point is used and + * it is not flowtyped. + * + * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef + * [2] https://facebook.github.io/jest/docs/en/webpack.html + */ + + +/* harmony default export */ var katex_webpack = (katex); +__webpack_exports__ = __webpack_exports__["default"]; +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/katex/katex.min.css b/katex/katex.min.css new file mode 100644 index 0000000..3d27397 --- /dev/null +++ b/katex/katex.min.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.8"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/katex/katex.min.js b/katex/katex.min.js new file mode 100644 index 0000000..f5cd23a --- /dev/null +++ b/katex/katex.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return na}});var r=function e(t,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n,a,i="KaTeX parse error: "+t,o=r&&r.loc;if(o&&o.start<=o.end){var s=o.lexer.input;n=o.start,a=o.end,n===s.length?i+=" at end of input: ":i+=" at position "+(n+1)+": ";var l=s.slice(n,a).replace(/[^]/g,"$&\u0332");i+=(n>15?"\u2026"+s.slice(n-15,n):s.slice(0,n))+l+(a+15":">","<":"<",'"':""","'":"'"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand ",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var m=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[b[this.id]]},t.text=function(){return p[y[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t=5?0:e>=3?1:2]){var r=q[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return q[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();O.BASESIZE=6;var E=O,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},V=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},P=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},F=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e=""+this.alt+"=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=F(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+=""):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r":""},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,me,"\u22bc","\\barwedge",!0),ie(oe,he,me,"\u22bb","\\veebar",!0),ie(oe,le,me,"\u2299","\\odot",!0),ie(oe,le,me,"\u2295","\\oplus",!0),ie(oe,le,me,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,me,"\u2298","\\oslash",!0),ie(oe,he,me,"\u229a","\\circledcirc",!0),ie(oe,he,me,"\u22a1","\\boxdot",!0),ie(oe,le,me,"\u25b3","\\bigtriangleup"),ie(oe,le,me,"\u25bd","\\bigtriangledown"),ie(oe,le,me,"\u2020","\\dagger"),ie(oe,le,me,"\u22c4","\\diamond"),ie(oe,le,me,"\u22c6","\\star"),ie(oe,le,me,"\u25c3","\\triangleleft"),ie(oe,le,me,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,ce,"\u02ca","\\acute"),ie(oe,le,ce,"\u02cb","\\grave"),ie(oe,le,ce,"\xa8","\\ddot"),ie(oe,le,ce,"~","\\tilde"),ie(oe,le,ce,"\u02c9","\\bar"),ie(oe,le,ce,"\u02d8","\\breve"),ie(oe,le,ce,"\u02c7","\\check"),ie(oe,le,ce,"^","\\hat"),ie(oe,le,ce,"\u20d7","\\vec"),ie(oe,le,ce,"\u02d9","\\dot"),ie(oe,le,ce,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,ce,"\u02ca","\\'"),ie(se,le,ce,"\u02cb","\\`"),ie(se,le,ce,"\u02c6","\\^"),ie(se,le,ce,"\u02dc","\\~"),ie(se,le,ce,"\u02c9","\\="),ie(se,le,ce,"\u02d8","\\u"),ie(se,le,ce,"\u02d9","\\."),ie(se,le,ce,"\xb8","\\c"),ie(se,le,ce,"\u02da","\\r"),ie(se,le,ce,"\u02c7","\\v"),ie(se,le,ce,"\xa8",'\\"'),ie(se,le,ce,"\u02dd","\\H"),ie(se,le,ce,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Set&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=F(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var c=ct(["katex-html"],o);if(c.setAttribute("aria-hidden","true"),i){var m=i.children[0];m.style.height=F(c.height+c.depth),c.depth&&(m.style.verticalAlign=F(-c.depth))}return c}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",F(this.width)),e},t.toMarkup=function(){return this.character?""+this.character+"":''},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),N(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,n,a){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),c=new Tt.MathNode("math",[h]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var m=a?"katex":"katex-mathml";return Ke.makeSpan([m],[c])}var Ot=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ot(r);if("mathml"===r.output)return Ht(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ht(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Vt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Pt=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:F(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=F(o),i},Ft=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.slice(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var c=new J(i),m=new K([c],{width:"100%",height:F(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[m],t),minWidth:0,height:o}}var u,p,d,f=[],g=Vt[n],v=g[0],b=g[1],y=g[2],x=y/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k0&&(n.style.minWidth=F(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,c="\\c"===n.label,m=c?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+F(2*o)+")",marginLeft:F(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,c&&(m+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),m=i.height);var f=o;d||(f-=p/2),h.style.left=F(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-m},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Ft(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Ft(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,c=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=i.depth),r){var m=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:m}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Ft(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt=Ke.makeSpan;function Kt(e,t){var r=ft(e.body,t,!0);return Zt([e.mclass],r,t)}function Jt(e,t){var r,n=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0]).type="mi":r=new Tt.MathNode("mi",n):(e.isCharacterBox?(r=n[0]).type="mo":r=new Tt.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:ht(a),isCharacterBox:l.isCharacterBox(a)}},htmlBuilder:Kt,mathmlBuilder:Jt});var Qt=function(e){var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:function(e,t){return{type:"mclass",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler:function(e,t){var r,n=e.parser,a=e.funcName,i=t[1],o=t[0];r="\\stackrel"!==a?Qt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==a,body:ht(i)},h={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===a?null:o,sub:"\\underset"===a?o:null};return{type:"mclass",mode:n.mode,mclass:r,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Kt,mathmlBuilder:Jt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"pmb",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[0])}},htmlBuilder:function(e,t){var r=ft(e.body,t,!0),n=Ke.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder:function(e,t){var r=qt(e.body,t),n=new Tt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var er={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},tr=function(e){return"textord"===e.type&&"@"===e.text};function rr(e,t,r){var n=er[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=F(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var nr=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=function(e,t){var r=qt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a="["===n.gullet.future().text?n.parseSizeGroup(!0):null,i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=F(P(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",F(P(e.size,t)))),r}});var ir={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},or=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},sr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(ir[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=ir[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===ir[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return sr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return sr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var lr=function(e,t,r){var n=N(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},hr=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},cr=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=F(a),e.height-=a,e.depth+=a},mr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=hr(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&cr(s,n,x.TEXT),s},ur=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:F(n),height:F(t),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=F(t),o.style.width=F(n),{type:"elem",elem:o}},dr={type:"kern",size:-.008},fr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],vr=function(e,t,r,n,a,i){var o,s,h,c,m="",u=0;o=h=c=e,s=null;var p="Size1-Regular";"\\uparrow"===e?h=c="\u23d0":"\\Uparrow"===e?h=c="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",c="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",c="\\Downarrow"):l.contains(fr,e)?(h="\u2223",m="vert",u=333):l.contains(gr,e)?(h="\u2225",m="doublevert",u=556):"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",c="\u23a3",p="Size4-Regular",m="lbrack",u=667):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",c="\u23a6",p="Size4-Regular",m="rbrack",u=667):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",c="\u23a3",p="Size4-Regular",m="lfloor",u=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=c="\u23a2",p="Size4-Regular",m="lceil",u=667):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",c="\u23a6",p="Size4-Regular",m="rfloor",u=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=c="\u23a5",p="Size4-Regular",m="rceil",u=667):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",c="\u239d",p="Size4-Regular",m="lparen",u=875):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",c="\u23a0",p="Size4-Regular",m="rparen",u=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",c="\u23a9",h="\u23aa",p="Size4-Regular");var d=lr(o,p,a),f=d.height+d.depth,g=lr(h,p,a),v=g.height+g.depth,b=lr(c,p,a),y=b.height+b.depth,w=0,k=1;if(null!==s){var S=lr(s,p,a);w=S.height+S.depth,k=2}var M=f+y+w,z=M+Math.max(0,Math.ceil((t-M)/(k*v)))*k*v,A=n.fontMetrics().axisHeight;r&&(A*=n.sizeMultiplier);var T=z/2-A,B=[];if(m.length>0){var C=z-f-y,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(m,Math.round(1e3*C)),I=new J(m,q),R=(u/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new K([I],{width:R,height:H,viewBox:"0 0 "+u+" "+N}),E=Ke.makeSvgSpan([],[O],n);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(ur(c,p,a)),B.push(dr),null===s){var L=z-f-y+.016;B.push(pr(h,L,n))}else{var D=(z-f-y-w)/2+.016;B.push(pr(h,D,n)),B.push(dr),B.push(ur(s,p,a)),B.push(dr),B.push(pr(h,D,n))}B.push(dr),B.push(ur(o,p,a))}var V=n.havingBaseStyle(x.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return hr(Ke.makeSpan(["delimsizing","mult"],[P],V),x.TEXT,n,i)},br=.08,yr=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:F(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},xr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],wr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],kr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Sr=[0,1.2,1.8,2.4,3],Mr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],zr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],Ar=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Tr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Br=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);at)return r[a]}return r[r.length-1]},Cr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(kr,e)?Mr:l.contains(xr,e)?Ar:zr;var s=Br(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=hr(o,t,n,i);return r&&cr(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?mr(e,s.size,r,n,a,i):vr(e,t,r,n,a,i)},Nr={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Br("\\surd",e*a.sizeMultiplier,Ar,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,c=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=yr("sqrtMain",l=(1+s+br)/o,c=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(c=1080*Sr[i.size],h=(Sr[i.size]+s)/o,l=(Sr[i.size]+s+br)/o,(r=yr("sqrtSize"+i.size,l,c,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+br,h=e+s,c=Math.floor(1e3*e+s)+80,(r=yr("sqrtTall",l,c,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=F(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(xr,e)||l.contains(kr,e))return mr(e,t,!1,r,a,i);if(l.contains(wr,e))return vr(e,Sr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:Sr,customSizedDelim:Cr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Cr(e,h,!0,n,a,i)}},qr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Ir=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Rr(e,t){var r=Xt(e);if(r&&l.contains(Ir,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Hr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Rr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:qr[e.funcName].size,mclass:qr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Nr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=F(Nr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Rr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Rr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){Hr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Lr={};function Dr(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l1||!m)&&g.pop(),b.length0&&(y+=.25),c.push({pos:y,isDashed:e[t]})}for(w(o[0]),r=0;r0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,h[r]=z,w(o[r+1])}var C,N,q=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(V.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=F(W),R.push(C));var _=[];for(r=0;r0){for(var K=Ke.makeLineSpan("hline",t,m),J=Ke.makeLineSpan("hdashline",t,m),Q=[{type:"elem",elem:h,shift:0}];c.length>0;){var ee=c.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},$r={c:"center ",l:"left ",r:"right "},Zr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(m+="top ",g=1),"separator"===p[p.length-1].type&&(m+="bottom ",v-=1);for(var b=g;b0?"left ":"",m+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",o="split"===e.envName,s=Wr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Xr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var c="",m=0;m0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Dr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Wr(e.parser,a,_r(e.envName))},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Wr(e.parser,a,_r(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Wr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},_r(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Yr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Xr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Yr(e);var t={autoTag:Xr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Yr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[m]);for(var d=0;d<2;d++){for(var f=!0,g=m+1;g=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height0?3*m:7*m,d=t.fontMetrics().denom1):(c>0?(u=t.fontMetrics().num2,p=m):(u=t.fontMetrics().num3,p=3*m),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*c)0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,c=Ut(t[2],"size"),m=null;r=!!c.isBlank||(m=c.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:m,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Ft(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i0&&(n=P(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=P(e.width,t));var i={height:F(r+n)};a>0&&(i.width=F(a)),n>0&&(i.verticalAlign=F(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=P(e.height,t),a=0;if(e.totalheight.number>0&&(a=P(e.totalheight,t)-n,r.setAttribute("valign",F(-a))),r.setAttribute("height",F(n+a)),e.width.number>0){var i=P(e.width,t);r.setAttribute("width",F(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=P(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=F(a.height+a.depth),a.depth&&(i.style.verticalAlign=F(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var cn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=cn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=cn(e,t);return It(r,t)}});var mn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,c,m=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;c=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[c];if(s&&0!==i&&!m){var b=Ke.makeSpan(["mspace"],[],n);b.style.marginRight=F(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var c=h?"Size2-Regular":"Size1-Regular",m="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(m=a.name.slice(1),a.name="oiint"===m?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,c,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),m.length>0){var u=o.italic,p=Ke.staticSvg(m+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+m,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h=0?s.setAttribute("height",F(a)):(s.setAttribute("height",F(a)),s.setAttribute("depth",F(-a))),s.setAttribute("voffset",F(a)),s}});var yn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=qt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",F(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;lr.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=F(c);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),b=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[b,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return bn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=qt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,c=wt(o,t),m=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=c.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=c.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?m.sup1:t.style.cramped?m.sup3:m.sup2;var v,b=t.sizeMultiplier,y=F(.5/m.ptPerEm/b),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(c instanceof Z||k)&&(w=F(-c.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-n.depth-(a.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:y,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,m.sub1,a.height-.8*m.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*m.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:y}]},t)}var T=yt(c,"right")||"mord";return Ke.makeSpan([T],[c,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=Nt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=Nt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=Nn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),Vn=Vr;Pr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Pr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Pr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Pr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Pr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Pr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Pr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Pn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Pr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Pn[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=Pn[e.future().text])&&i":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Pr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Gn?t=Gn[r]:("\\not"===r.slice(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Un={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Pr("\\dotso",(function(e){return e.future().text in Un?"\\ldots\\,":"\\ldots"})),Pr("\\dotsc",(function(e){var t=e.future().text;return t in Un&&","!==t?"\\ldots\\,":"\\ldots"})),Pr("\\cdots",(function(e){return e.future().text in Un?"\\@cdots\\,":"\\@cdots"})),Pr("\\dotsb","\\cdots"),Pr("\\dotsm","\\cdots"),Pr("\\dotsi","\\!\\cdots"),Pr("\\dotsx","\\ldots\\,"),Pr("\\DOTSI","\\relax"),Pr("\\DOTSB","\\relax"),Pr("\\DOTSX","\\relax"),Pr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Pr("\\,","\\tmspace+{3mu}{.1667em}"),Pr("\\thinspace","\\,"),Pr("\\>","\\mskip{4mu}"),Pr("\\:","\\tmspace+{4mu}{.2222em}"),Pr("\\medspace","\\:"),Pr("\\;","\\tmspace+{5mu}{.2777em}"),Pr("\\thickspace","\\;"),Pr("\\!","\\tmspace-{3mu}{.1667em}"),Pr("\\negthinspace","\\!"),Pr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Pr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Pr("\\enspace","\\kern.5em "),Pr("\\enskip","\\hskip.5em\\relax"),Pr("\\quad","\\hskip1em\\relax"),Pr("\\qquad","\\hskip2em\\relax"),Pr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Pr("\\tag@paren","\\tag@literal{({#1})}"),Pr("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Pr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Pr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Pr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Pr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Pr("\\newline","\\\\\\relax"),Pr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Yn=F(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Pr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Yn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Pr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Yn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Pr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Pr("\\@hspace","\\hskip #1\\relax"),Pr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Pr("\\ordinarycolon",":"),Pr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Pr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Pr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Pr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Pr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Pr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Pr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Pr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Pr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Pr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Pr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Pr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Pr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Pr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Pr("\u2237","\\dblcolon"),Pr("\u2239","\\eqcolon"),Pr("\u2254","\\coloneqq"),Pr("\u2255","\\eqqcolon"),Pr("\u2a74","\\Coloneqq"),Pr("\\ratio","\\vcentcolon"),Pr("\\coloncolon","\\dblcolon"),Pr("\\colonequals","\\coloneqq"),Pr("\\coloncolonequals","\\Coloneqq"),Pr("\\equalscolon","\\eqqcolon"),Pr("\\equalscoloncolon","\\Eqqcolon"),Pr("\\colonminus","\\coloneq"),Pr("\\coloncolonminus","\\Coloneq"),Pr("\\minuscolon","\\eqcolon"),Pr("\\minuscoloncolon","\\Eqcolon"),Pr("\\coloncolonapprox","\\Colonapprox"),Pr("\\coloncolonsim","\\Colonsim"),Pr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Pr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Pr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Pr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Pr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Pr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Pr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Pr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Pr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Pr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Pr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Pr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Pr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Pr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Pr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Pr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Pr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Pr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Pr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Pr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Pr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Pr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Pr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Pr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Pr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Pr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Pr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Pr("\u27e6","\\llbracket"),Pr("\u27e7","\\rrbracket"),Pr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Pr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Pr("\u2983","\\lBrace"),Pr("\u2984","\\rBrace"),Pr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Pr("\u29b5","\\minuso"),Pr("\\darr","\\downarrow"),Pr("\\dArr","\\Downarrow"),Pr("\\Darr","\\Downarrow"),Pr("\\lang","\\langle"),Pr("\\rang","\\rangle"),Pr("\\uarr","\\uparrow"),Pr("\\uArr","\\Uparrow"),Pr("\\Uarr","\\Uparrow"),Pr("\\N","\\mathbb{N}"),Pr("\\R","\\mathbb{R}"),Pr("\\Z","\\mathbb{Z}"),Pr("\\alef","\\aleph"),Pr("\\alefsym","\\aleph"),Pr("\\Alpha","\\mathrm{A}"),Pr("\\Beta","\\mathrm{B}"),Pr("\\bull","\\bullet"),Pr("\\Chi","\\mathrm{X}"),Pr("\\clubs","\\clubsuit"),Pr("\\cnums","\\mathbb{C}"),Pr("\\Complex","\\mathbb{C}"),Pr("\\Dagger","\\ddagger"),Pr("\\diamonds","\\diamondsuit"),Pr("\\empty","\\emptyset"),Pr("\\Epsilon","\\mathrm{E}"),Pr("\\Eta","\\mathrm{H}"),Pr("\\exist","\\exists"),Pr("\\harr","\\leftrightarrow"),Pr("\\hArr","\\Leftrightarrow"),Pr("\\Harr","\\Leftrightarrow"),Pr("\\hearts","\\heartsuit"),Pr("\\image","\\Im"),Pr("\\infin","\\infty"),Pr("\\Iota","\\mathrm{I}"),Pr("\\isin","\\in"),Pr("\\Kappa","\\mathrm{K}"),Pr("\\larr","\\leftarrow"),Pr("\\lArr","\\Leftarrow"),Pr("\\Larr","\\Leftarrow"),Pr("\\lrarr","\\leftrightarrow"),Pr("\\lrArr","\\Leftrightarrow"),Pr("\\Lrarr","\\Leftrightarrow"),Pr("\\Mu","\\mathrm{M}"),Pr("\\natnums","\\mathbb{N}"),Pr("\\Nu","\\mathrm{N}"),Pr("\\Omicron","\\mathrm{O}"),Pr("\\plusmn","\\pm"),Pr("\\rarr","\\rightarrow"),Pr("\\rArr","\\Rightarrow"),Pr("\\Rarr","\\Rightarrow"),Pr("\\real","\\Re"),Pr("\\reals","\\mathbb{R}"),Pr("\\Reals","\\mathbb{R}"),Pr("\\Rho","\\mathrm{P}"),Pr("\\sdot","\\cdot"),Pr("\\sect","\\S"),Pr("\\spades","\\spadesuit"),Pr("\\sub","\\subset"),Pr("\\sube","\\subseteq"),Pr("\\supe","\\supseteq"),Pr("\\Tau","\\mathrm{T}"),Pr("\\thetasym","\\vartheta"),Pr("\\weierp","\\wp"),Pr("\\Zeta","\\mathrm{Z}"),Pr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Pr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Pr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Pr("\\bra","\\mathinner{\\langle{#1}|}"),Pr("\\ket","\\mathinner{|{#1}\\rangle}"),Pr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Pr("\\Bra","\\left\\langle#1\\right|"),Pr("\\Ket","\\left|#1\\right\\rangle");var Xn=function(e){return function(t){var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=function(t){return function(r){e&&(r.macros.set("|",o),a.length&&r.macros.set("\\|",s));var i=t;!t&&a.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,c=t.expandTokens([].concat(i,h,r));return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}}};Pr("\\bra@ket",Xn(!1)),Pr("\\bra@set",Xn(!0)),Pr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Pr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Pr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Pr("\\angln","{\\angl n}"),Pr("\\blue","\\textcolor{##6495ed}{#1}"),Pr("\\orange","\\textcolor{##ffa500}{#1}"),Pr("\\pink","\\textcolor{##ff00af}{#1}"),Pr("\\red","\\textcolor{##df0030}{#1}"),Pr("\\green","\\textcolor{##28ae7b}{#1}"),Pr("\\gray","\\textcolor{gray}{#1}"),Pr("\\purple","\\textcolor{##9d38bd}{#1}"),Pr("\\blueA","\\textcolor{##ccfaff}{#1}"),Pr("\\blueB","\\textcolor{##80f6ff}{#1}"),Pr("\\blueC","\\textcolor{##63d9ea}{#1}"),Pr("\\blueD","\\textcolor{##11accd}{#1}"),Pr("\\blueE","\\textcolor{##0c7f99}{#1}"),Pr("\\tealA","\\textcolor{##94fff5}{#1}"),Pr("\\tealB","\\textcolor{##26edd5}{#1}"),Pr("\\tealC","\\textcolor{##01d1c1}{#1}"),Pr("\\tealD","\\textcolor{##01a995}{#1}"),Pr("\\tealE","\\textcolor{##208170}{#1}"),Pr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Pr("\\greenB","\\textcolor{##8af281}{#1}"),Pr("\\greenC","\\textcolor{##74cf70}{#1}"),Pr("\\greenD","\\textcolor{##1fab54}{#1}"),Pr("\\greenE","\\textcolor{##0d923f}{#1}"),Pr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Pr("\\goldB","\\textcolor{##ffbb71}{#1}"),Pr("\\goldC","\\textcolor{##ff9c39}{#1}"),Pr("\\goldD","\\textcolor{##e07d10}{#1}"),Pr("\\goldE","\\textcolor{##a75a05}{#1}"),Pr("\\redA","\\textcolor{##fca9a9}{#1}"),Pr("\\redB","\\textcolor{##ff8482}{#1}"),Pr("\\redC","\\textcolor{##f9685d}{#1}"),Pr("\\redD","\\textcolor{##e84d39}{#1}"),Pr("\\redE","\\textcolor{##bc2612}{#1}"),Pr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Pr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Pr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Pr("\\maroonD","\\textcolor{##ca337c}{#1}"),Pr("\\maroonE","\\textcolor{##9e034e}{#1}"),Pr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Pr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Pr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Pr("\\purpleD","\\textcolor{##7854ab}{#1}"),Pr("\\purpleE","\\textcolor{##543b78}{#1}"),Pr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Pr("\\mintB","\\textcolor{##edf2df}{#1}"),Pr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Pr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Pr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Pr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Pr("\\grayD","\\textcolor{##d6d8da}{#1}"),Pr("\\grayE","\\textcolor{##babec2}{#1}"),Pr("\\grayF","\\textcolor{##888d93}{#1}"),Pr("\\grayG","\\textcolor{##626569}{#1}"),Pr("\\grayH","\\textcolor{##3b3e40}{#1}"),Pr("\\grayI","\\textcolor{##21242c}{#1}"),Pr("\\kaBlue","\\textcolor{##314453}{#1}"),Pr("\\kaGreen","\\textcolor{##71B307}{#1}");var Wn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},_n=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Dn(Vn,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Ln(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Gr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i.length},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;)if(!1===this.expandOnce()){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Gr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Ln(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||qn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Wn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:qn.hasOwnProperty(e)&&!qn[e].primitive},e}(),jn=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,$n=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Zn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Kn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Jn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new _n(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Gr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&qn[a.text]&&qn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Fr.range(e);if(te.hasOwnProperty(l)){var c=l;s={type:"atom",mode:this.mode,family:c,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Fr.range(e),text:t}}if(this.consume(),o)for(var m=0;m 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + // $FlowFixMe + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; + self.position = start; + + if (start != null && end != null) { + self.length = end - start; + } + + self.rawMessage = message; + return self; + } + +} // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; + +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function escape(text) { + return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +var utils = { + contains, + deflt, + escape, + hyphenate, + getBaseElem, + isCharacterBox, + protocolFromUrl +}; + +/* eslint no-console:0 */ +// TODO: automatically generate documentation +// TODO: check all properties on Settings exist +// TODO: check the type of a property on Settings matches +var SETTINGS_SCHEMA = { + displayMode: { + type: "boolean", + description: "Render math in display mode, which puts the math in " + "display style (so \\int and \\sum are large, for example), and " + "centers the math on the page on its own line.", + cli: "-d, --display-mode" + }, + output: { + type: { + enum: ["htmlAndMathml", "html", "mathml"] + }, + description: "Determines the markup language of the output.", + cli: "-F, --format " + }, + leqno: { + type: "boolean", + description: "Render display math in leqno style (left-justified tags)." + }, + fleqn: { + type: "boolean", + description: "Render display math flush left." + }, + throwOnError: { + type: "boolean", + default: true, + cli: "-t, --no-throw-on-error", + cliDescription: "Render errors (in the color given by --error-color) ins" + "tead of throwing a ParseError exception when encountering an error." + }, + errorColor: { + type: "string", + default: "#cc0000", + cli: "-c, --error-color ", + cliDescription: "A color string given in the format 'rgb' or 'rrggbb' " + "(no #). This option determines the color of errors rendered by the " + "-t option.", + cliProcessor: color => "#" + color + }, + macros: { + type: "object", + cli: "-m, --macro ", + cliDescription: "Define custom macro of the form '\\foo:expansion' (use " + "multiple -m arguments for multiple macros).", + cliDefault: [], + cliProcessor: (def, defs) => { + defs.push(def); + return defs; + } + }, + minRuleThickness: { + type: "number", + description: "Specifies a minimum thickness, in ems, for fraction lines," + " `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, " + "`\\hdashline`, `\\underline`, `\\overline`, and the borders of " + "`\\fbox`, `\\boxed`, and `\\fcolorbox`.", + processor: t => Math.max(0, t), + cli: "--min-rule-thickness ", + cliProcessor: parseFloat + }, + colorIsTextColor: { + type: "boolean", + description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, " + "instead of LaTeX's one-argument \\color mode change.", + cli: "-b, --color-is-text-color" + }, + strict: { + type: [{ + enum: ["warn", "ignore", "error"] + }, "boolean", "function"], + description: "Turn on strict / LaTeX faithfulness mode, which throws an " + "error if the input uses features that are not supported by LaTeX.", + cli: "-S, --strict", + cliDefault: false + }, + trust: { + type: ["boolean", "function"], + description: "Trust the input, enabling all HTML features such as \\url.", + cli: "-T, --trust" + }, + maxSize: { + type: "number", + default: Infinity, + description: "If non-zero, all user-specified sizes, e.g. in " + "\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, " + "elements and spaces can be arbitrarily large", + processor: s => Math.max(0, s), + cli: "-s, --max-size ", + cliProcessor: parseInt + }, + maxExpand: { + type: "number", + default: 1000, + description: "Limit the number of macro expansions to the specified " + "number, to prevent e.g. infinite macro loops. If set to Infinity, " + "the macro expander will try to fully expand as in LaTeX.", + processor: n => Math.max(0, n), + cli: "-e, --max-expand ", + cliProcessor: n => n === "Infinity" ? Infinity : parseInt(n) + }, + globalGroup: { + type: "boolean", + cli: false + } +}; + +function getDefaultValue(schema) { + if (schema.default) { + return schema.default; + } + + var type = schema.type; + var defaultType = Array.isArray(type) ? type[0] : type; + + if (typeof defaultType !== 'string') { + return defaultType.enum[0]; + } + + switch (defaultType) { + case 'boolean': + return false; + + case 'string': + return ''; + + case 'number': + return 0; + + case 'object': + return {}; + } +} +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ + + +class Settings { + constructor(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + this.globalGroup = void 0; + // allow null options + options = options || {}; + + for (var prop in SETTINGS_SCHEMA) { + if (SETTINGS_SCHEMA.hasOwnProperty(prop)) { + // $FlowFixMe + var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options + // $FlowFixMe + + this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema); + } + } + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + + + useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + + + isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + } + +} + +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +class Style { + constructor(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + sup() { + return styles[sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + + + sub() { + return styles[sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + + + fracNum() { + return styles[fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + + + fracDen() { + return styles[fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + + + cramp() { + return styles[cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + + + text() { + return styles[text$1[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + + + isTight() { + return this.size >= 2; + } + +} // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +var Style$1 = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f] // Combining Diacritical marks + ] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // Armenian + name: 'armenian', + blocks: [[0x0530, 0x058F]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60] // Fullwidth punctuation + // TODO: add halfwidth Katakana and Romanji glyphs + ] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} + +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping. +// The vinculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraVinculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraVinculum below. +// The detour proceeds one extraVinculum distance up and slightly to the right, +// displacing the radiused corner between surd and vinculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long vinculum, then down one extraVinculum distance, +// after which it resumes regular path geometry for the radical. + +/* vinculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum + / █████████████████████←0.04em (40 unit) std vinculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraVinculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraVinculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraVinculum / 2.075 + " -" + extraVinculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraVinculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraVinculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraVinculum / 2.084 + " -" + extraVinculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraVinculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraVinculum + hLinePad) + "\nl" + extraVinculum / 3.13 + " -" + extraVinculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraVinculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraVinculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraVinculum / 4.223 + " -" + extraVinculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraVinculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraVinculum) + " " + hLinePad + "\nh400000v" + (40 + extraVinculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraVinculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraVinculum / 5.298 + " -" + extraVinculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraVinculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraVinculum) + " " + hLinePad + "h400000v" + (40 + extraVinculum) + "H1017.7z"; +}; + +var phasePath = function phasePath(y) { + var x = y / 2; // x coordinate at top of angle + + return "M400000 " + y + " H0 L" + x + " 0 l65 45 L145 " + (y - 80) + " H400000z"; +}; + +var sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the vinculum + // to a point near (14 units) the bottom of the surd. The vinculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum; + return "M702 " + (extraVinculum + hLinePad) + "H400000" + (40 + extraVinculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraVinculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) { + extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraVinculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraVinculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraVinculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraVinculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraVinculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var innerPath = function innerPath(name, height) { + // The inner part of stretchy tall delimiters + switch (name) { + case "\u239c": + return "M291 0 H417 V" + height + " H291z M291 0 H417 V" + height + " H291z"; + + case "\u2223": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z"; + + case "\u2225": + return "M145 0 H188 V" + height + " H145z M145 0 H188 V" + height + " H145z" + ("M367 0 H410 V" + height + " H367z M367 0 H410 V" + height + " H367z"); + + case "\u239f": + return "M457 0 H583 V" + height + " H457z M457 0 H583 V" + height + " H457z"; + + case "\u23a2": + return "M319 0 H403 V" + height + " H319z M319 0 H403 V" + height + " H319z"; + + case "\u23a5": + return "M263 0 H347 V" + height + " H263z M263 0 H347 V" + height + " H263z"; + + case "\u23aa": + return "M384 0 H504 V" + height + " H384z M384 0 H504 V" + height + " H384z"; + + case "\u23d0": + return "M312 0 H355 V" + height + " H312z M312 0 H355 V" + height + " H312z"; + + case "\u2016": + return "M257 0 H300 V" + height + " H257z M257 0 H300 V" + height + " H257z" + ("M478 0 H521 V" + height + " H478z M478 0 H521 V" + height + " H478z"); + + default: + return ""; + } +}; +var path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +var tallDelim = function tallDelim(label, midHeight) { + switch (label) { + case "lbrack": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v" + midHeight + " v1759 h84z"; + + case "rbrack": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v" + midHeight + " v1759 h84z"; + + case "vert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z"; + + case "doublevert": + return "M145 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v" + midHeight + " v585 h43z\nM367 15 v585 v" + midHeight + " v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v" + -midHeight + " v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v" + midHeight + " v585 h43z"; + + case "lfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "rfloor": + return "M319 602 V0 H403 V602 v" + midHeight + " v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v" + midHeight + " v1715 H319z"; + + case "lceil": + return "M403 1759 V84 H666 V0 H319 V1759 v" + midHeight + " v602 h84z\nM403 1759 V0 H319 V1759 v" + midHeight + " v602 h84z"; + + case "rceil": + return "M347 1759 V0 H0 V84 H263 V1759 v" + midHeight + " v602 h84z\nM347 1759 V0 h-84 V1759 v" + midHeight + " v602 h84z"; + + case "lparen": + return "M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0," + (midHeight + 84) + "c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-" + (midHeight + 92) + "c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z"; + + case "rparen": + return "M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0," + (midHeight + 9) + "\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-" + (midHeight + 144) + "c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z"; + + default: + // We should not ever get here. + throw new Error("Unknown stretchy delimiter."); + } +}; + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +class DocumentFragment { + // HtmlDomNode + // Never used; needed for satisfying interface. + constructor(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + + + toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + + + toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + + + toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = child => child.toText(); + + return this.children.map(toText).join(""); + } + +} + +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +var fontMetricsData = { + "AMS-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "160": [0, 0, 0, 0, 0.25], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473], + "160": [0, 0, 0, 0, 0.25] + }, + "Fraktur-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "160": [0, 0, 0, 0, 0.25], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8773": [0.027, 0.638, 0, 0, 0.894], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "163": [0, 0.69444, 0, 0, 0.76909], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.123, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 0.778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.673, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.903, 0, 0, 0.278], + "8943": [-0.19, 0.313, 0, 0, 1.172], + "8945": [-0.1, 0.823, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.745, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.745, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.44444, 0, 0, 0.575], + "49": [0, 0.44444, 0, 0, 0.575], + "50": [0, 0.44444, 0, 0, 0.575], + "51": [0.19444, 0.44444, 0, 0, 0.575], + "52": [0.19444, 0.44444, 0, 0, 0.575], + "53": [0.19444, 0.44444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0.19444, 0.44444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0.19444, 0.44444, 0, 0, 0.575], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333], + "57649": [0, 0.44444, 0, 0, 0.39352], + "57911": [0.19444, 0.44444, 0, 0, 0.43889] + }, + "Math-Italic": { + "32": [0, 0, 0, 0, 0.25], + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "160": [0, 0, 0, 0, 0.25], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059], + "57649": [0, 0.43056, 0, 0.02778, 0.32246], + "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403] + }, + "SansSerif-Bold": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "32": [0, 0, 0, 0, 0.25], + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212], + "160": [0, 0, 0, 0, 0.25] + }, + "Size1-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "32": [0, 0, 0, 0, 0.25], + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "160": [0, 0, 0, 0, 0.25], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}; + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retrieved using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glyph + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} + +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9] // size11: [24.88, 20.74, 17.28] \HUGE +]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +class Options { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + constructor(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + + + havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + + + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + + + havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + + + havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + + + havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + + + withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + + + withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + + + withFont(font) { + return this.extend({ + font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + + + withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontShape(fontShape) { + return this.extend({ + fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + + + sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + + + baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + + + fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + + + getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + } + +} + +Options.BASESIZE = 6; + +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +/** + * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See + * https://github.com/KaTeX/KaTeX/pull/2460. + */ + +var makeEm = function makeEm(n) { + return +n.toFixed(4) + "em"; +}; + +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(cls => cls).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +class Span { + constructor(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "span"); + } + + toMarkup() { + return toMarkup.call(this, "span"); + } + +} +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +class Anchor { + constructor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "a"); + } + + toMarkup() { + return toMarkup.call(this, "a"); + } + +} +/** + * This node represents an image embed () element. + */ + +class Img { + constructor(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + } + + toMarkup() { + var markup = "" + this.alt + " 0) { + span = document.createElement("span"); + span.style.marginRight = makeEm(this.italic); + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + + + toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } + +} +/** + * SVG nodes are used to render stretchy wide elements. + */ + +class SvgNode { + constructor(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + + toMarkup() { + var markup = ""; + } else { + return ""; + } + } + +} +class LineNode { + constructor(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + } + + toMarkup() { + var markup = " but got " + String(group) + "."); + } +} + +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font, + group, + replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var math = "math"; +var text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var accent = "accent-token"; +var bin = "bin"; +var close = "close"; +var inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var open = "open"; +var punct = "punct"; +var rel = "rel"; +var spacing = "spacing"; +var textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227a", "\\prec", true); +defineSymbol(math, main, rel, "\u227b", "\\succ", true); +defineSymbol(math, main, rel, "\u223c", "\\sim", true); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226a", "\\ll", true); +defineSymbol(math, main, rel, "\u226b", "\\gg", true); +defineSymbol(math, main, rel, "\u224d", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220b", "\\ni", true); +defineSymbol(math, main, rel, "\u221d", "\\propto", true); +defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(text, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(text, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210f", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266d", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266e", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266f", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211c", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(math, main, textord, "\u00a7", "\\S", true); +defineSymbol(text, main, textord, "\u00a7", "\\S"); +defineSymbol(math, main, textord, "\u00b6", "\\P", true); +defineSymbol(text, main, textord, "\u00b6", "\\P"); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true); +defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true); +defineSymbol(math, main, close, "\u27ef", "\\rgroup", true); +defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228e", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc", true); +defineSymbol(math, main, bin, "\u2219", "\\bullet", true); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); +defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(text, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); +defineSymbol(text, main, textord, "\u00f0", "\u00f0"); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(text, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, open, "\u250c", "\\@ulcorner", true); +defineSymbol(math, ams, close, "\u2510", "\\@urcorner", true); +defineSymbol(math, ams, open, "\u2514", "\\@llcorner", true); +defineSymbol(math, ams, close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between", true); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); +defineSymbol(math, main, rel, "\u22b6", "\\origof", true); // not in font + +defineSymbol(math, main, rel, "\u22b7", "\\imageof", true); // not in font + +defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221e", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039e", "\\Xi", true); +defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\u00ac", "\\neg", true); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); +defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); +defineSymbol(math, main, mathord, "\u03be", "\\xi", true); +defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*", true); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-", true); +defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ", true); +defineSymbol(math, main, bin, "\u00f7", "\\div", true); +defineSymbol(math, main, bin, "\u00b1", "\\pm", true); +defineSymbol(math, main, bin, "\u00d7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222a", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus", true); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, open, "\u27e8", "\\langle", true); +defineSymbol(math, main, open, "\u2223", "\\lvert"); +defineSymbol(math, main, open, "\u2225", "\\lVert"); +defineSymbol(math, main, close, "?", "?"); +defineSymbol(math, main, close, "!", "!"); +defineSymbol(math, main, close, "\u27e9", "\\rangle", true); +defineSymbol(math, main, close, "\u2223", "\\rvert"); +defineSymbol(math, main, close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt", true); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\ue020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt", true); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(text, main, spacing, "\u00a0", "\\ "); +defineSymbol(text, main, spacing, "\u00a0", " "); +defineSymbol(text, main, spacing, "\u00a0", "\\space"); +defineSymbol(text, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, open, "{", "\\lbrace"); +defineSymbol(math, main, close, "}", "\\rbrace"); +defineSymbol(math, main, open, "[", "\\lbrack", true); +defineSymbol(text, main, textord, "[", "\\lbrack", true); +defineSymbol(math, main, close, "]", "\\rbrack", true); +defineSymbol(text, main, textord, "]", "\\rbrack", true); +defineSymbol(math, main, open, "(", "\\lparen", true); +defineSymbol(math, main, close, ")", "\\rparen", true); +defineSymbol(text, main, textord, "<", "\\textless", true); // in T1 fontenc + +defineSymbol(text, main, textord, ">", "\\textgreater", true); // in T1 fontenc + +defineSymbol(math, main, open, "\u230a", "\\lfloor", true); +defineSymbol(math, main, close, "\u230b", "\\rfloor", true); +defineSymbol(math, main, open, "\u2308", "\\lceil", true); +defineSymbol(math, main, close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text, main, textord, "|", "\\textbar", true); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(text, main, textord, "~", "\\textasciitilde"); +defineSymbol(text, main, textord, "\\", "\\textbackslash"); +defineSymbol(text, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22c1", "\\bigvee"); +defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2a04", "\\biguplus"); +defineSymbol(math, main, op, "\u22c2", "\\bigcap"); +defineSymbol(math, main, op, "\u22c3", "\\bigcup"); +defineSymbol(math, main, op, "\u222b", "\\int"); +defineSymbol(math, main, op, "\u222b", "\\intop"); +defineSymbol(math, main, op, "\u222c", "\\iint"); +defineSymbol(math, main, op, "\u222d", "\\iiint"); +defineSymbol(math, main, op, "\u220f", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2a00", "\\bigodot"); +defineSymbol(math, main, op, "\u222e", "\\oint"); +defineSymbol(math, main, op, "\u222f", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222b", "\\smallint"); +defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02ca", "\\acute"); +defineSymbol(math, main, accent, "\u02cb", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u02c9", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, accent, "\u02da", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA + +defineSymbol(math, main, mathord, "\ue131", "\\@imath"); +defineSymbol(math, main, mathord, "\ue237", "\\@jmath"); +defineSymbol(math, main, textord, "\u0131", "\u0131"); +defineSymbol(math, main, textord, "\u0237", "\u0237"); +defineSymbol(text, main, textord, "\u0131", "\\i", true); +defineSymbol(text, main, textord, "\u0237", "\\j", true); +defineSymbol(text, main, textord, "\u00df", "\\ss", true); +defineSymbol(text, main, textord, "\u00e6", "\\ae", true); +defineSymbol(text, main, textord, "\u0153", "\\oe", true); +defineSymbol(text, main, textord, "\u00f8", "\\o", true); +defineSymbol(text, main, textord, "\u00c6", "\\AE", true); +defineSymbol(text, main, textord, "\u0152", "\\OE", true); +defineSymbol(text, main, textord, "\u00d8", "\\O", true); +defineSymbol(text, main, accent, "\u02ca", "\\'"); // acute + +defineSymbol(text, main, accent, "\u02cb", "\\`"); // grave + +defineSymbol(text, main, accent, "\u02c6", "\\^"); // circumflex + +defineSymbol(text, main, accent, "\u02dc", "\\~"); // tilde + +defineSymbol(text, main, accent, "\u02c9", "\\="); // macron + +defineSymbol(text, main, accent, "\u02d8", "\\u"); // breve + +defineSymbol(text, main, accent, "\u02d9", "\\."); // dot above + +defineSymbol(text, main, accent, "\u00b8", "\\c"); // cedilla + +defineSymbol(text, main, accent, "\u02da", "\\r"); // ring above + +defineSymbol(text, main, accent, "\u02c7", "\\v"); // caron + +defineSymbol(text, main, accent, "\u00a8", '\\"'); // diaresis + +defineSymbol(text, main, accent, "\u02dd", "\\H"); // double acute + +defineSymbol(text, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(text, main, textord, "\u2013", "--", true); +defineSymbol(text, main, textord, "\u2013", "\\textendash"); +defineSymbol(text, main, textord, "\u2014", "---", true); +defineSymbol(text, main, textord, "\u2014", "\\textemdash"); +defineSymbol(text, main, textord, "\u2018", "`", true); +defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(text, main, textord, "\u2019", "'", true); +defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(text, main, textord, "\u201c", "``", true); +defineSymbol(text, main, textord, "\u201c", "\\textquotedblleft"); +defineSymbol(text, main, textord, "\u201d", "''", true); +defineSymbol(text, main, textord, "\u201d", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\u00b0", "\\degree", true); +defineSymbol(text, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(text, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Regular defines this character "163". + +defineSymbol(math, main, textord, "\u00a3", "\\pounds"); +defineSymbol(math, main, textord, "\u00a3", "\\mathsterling", true); +defineSymbol(text, main, textord, "\u00a3", "\\pounds"); +defineSymbol(text, main, textord, "\u00a3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text, ams, textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+\";:?/.,"; + +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + + defineSymbol(text, main, textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(text, main, textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(text, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(text, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(text, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(text, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(text, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(text, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(text, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var wideChar = ""; + +for (var _i3 = 0; _i3 < letters.length; _i3++) { + var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + + if (_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script + + defineSymbol(math, main, mathord, _ch3, wideChar); + defineSymbol(text, main, textord, _ch3, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(text, main, textord, "k", wideChar); // Next, some wide character numerals + +for (var _i4 = 0; _i4 < 10; _i4++) { + var _ch4 = _i4.toString(); + + wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace + + defineSymbol(math, main, mathord, _ch4, wideChar); + defineSymbol(text, main, textord, _ch4, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "\u00d0\u00de\u00fe"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(text, main, textord, _ch5, _ch5); +} + +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathnormal", "textit", "Math-Italic"], // A-Z italic +["mathnormal", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"] // a-z monospace +]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"] // 0-9 monospace +]; +var wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new ParseError("Unsupported character: " + wideChar); + } +}; + +/* eslint no-console:0 */ + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ +var lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes, type) { + if (type !== "textord" && lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + var [wideFontName, wideFontClass] = wideCharacterFont(text, mode); + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol") { + var fontData = boldsymbol(text, mode, options, classes, type); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + return makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"])); + } else if (type === "textord") { + var font = symbols[mode][text] && symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var canCombine = (prev, next) => { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } // If prev and next both are just "mbin"s or "mord"s we don't combine them + // so that the proper spacing can be preserved. + + + if (prev.classes.length === 1) { + var cls = prev.classes[0]; + + if (cls === "mbin" || cls === "mord") { + return false; + } + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consecutive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var tryCombineChars = chars => { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var makeSpan$2 = function makeSpan(classes, children, options, style) { + var span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = makeSpan$2([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = makeEm(line.height); + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var makeFragment = function makeFragment(children) { + var fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan$2([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size + }); + children.push(oldChildren[i]); + } + + return { + children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var makeVList = function makeVList(params, options) { + var { + children, + depth + } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = makeSpan$2(["pstrut"], []); + pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth); + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = makeSpan$2(["vlist"], realChildren); + vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = makeSpan$2([], []); + var depthStrut = makeSpan$2(["vlist"], [emptySpan]); + depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = makeSpan$2(["vlist-s"], [new SymbolNode("\u200b")]); + rows = [makeSpan$2(["vlist-r"], [vlist, topStrut]), makeSpan$2(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan$2(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan$2(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var makeGlue = (measurement, options) => { + // Make an empty span for the space + var rule = makeSpan$2(["mspace"], [], options); + var size = calculateSize(measurement, options); + rule.style.marginRight = makeEm(size); + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathnormal": { + variant: "italic", + fontName: "Math-Italic" + }, + // "boldsymbol" is missing because they require the use of multiple fonts: + // Math-BoldItalic and Main-Bold. This is handled by a special case in + // makeOrd which ends up calling boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var [pathName, width, height] = svgData[value]; + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return span; +}; + +var buildCommon = { + fontMap, + makeSymbol, + mathsym, + makeSpan: makeSpan$2, + makeSvgSpan, + makeLineSpan, + makeAnchor, + makeFragment, + wrapFragment, + makeVList, + makeOrd, + makeGlue, + staticSvg, + svgData, + tryCombineChars +}; + +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; + +/** Context provided to function handlers for error messages. */ +// Note: reverse the order of the return type union will cause a flow error. +// See https://github.com/facebook/flow/issues/3663. +// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types) +// whose presence impacts super/subscripting. In this case, ParseNode<"supsub"> +// delegates its HTML building to the HtmlBuilder corresponding to these nodes. + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of functions + var data = { + type, + numArgs: props.numArgs, + argTypes: props.argTypes, + allowedInArgument: !!props.allowedInArgument, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + primitive: !!props.primitive, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var { + type, + htmlBuilder, + mathmlBuilder + } = _ref2; + defineFunction({ + type, + names: [], + props: { + numArgs: 0 + }, + + handler() { + throw new Error('Should never be called.'); + }, + + htmlBuilder, + mathmlBuilder + }); +} +var normalizeArgument = function normalizeArgument(arg) { + return arg.type === "ordgroup" && arg.body.length === 1 ? arg.body[0] : arg; +}; // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var ordargument = function ordargument(arg) { + return arg.type === "ordgroup" ? arg.body : [arg]; +}; + +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ +var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap$1 = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildGroup$1(expression[i], options); + + if (output instanceof DocumentFragment) { + var children = output.children; + groups.push(...children); + } else { + groups.push(output); + } + } // Combine consecutive domTree.symbolNodes into a single symbolNode. + + + buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = expression[0]; + + if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap$1[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options); + var dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + var isRoot = isRealGroup === "root"; + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + traverseNonSpaceNodes(groups, (node, prev) => { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext, isRoot); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + var nonspace = !node.hasClass("mspace"); + + if (nonspace) { + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + } + + if (nonspace) { + prev.node = node; + } else if (isRoot && node.hasClass("newline")) { + prev.node = makeSpan$1(["leftmost"]); // treat like beginning of line + } + + prev.insertAfter = (index => n => { + nodes.splice(index + 1, 0, n); + i++; + })(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass("enclosing")) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan$1(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildGroup$1 = function buildGroup(group, options, baseOptions) { + if (!group) { + return makeSpan$1(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + + var strut = makeSpan$1(["strut"]); + strut.style.height = makeEm(body.height + body.depth); + + if (body.depth) { + strut.style.verticalAlign = makeEm(-body.depth); + } + + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildExpression$1(tree, options, "root"); + var eqnNum; + + if (expression.length === 2 && expression[1].hasClass("tag")) { + // An environment with automatic equation numbers, e.g. {gather}. + eqnNum = expression.pop(); + } + + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } else if (eqnNum) { + children.push(eqnNum); + } + + var htmlNode = makeSpan$1(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = makeEm(htmlNode.height + htmlNode.depth); + + if (htmlNode.depth) { + strut.style.verticalAlign = makeEm(-htmlNode.depth); + } + } + + return htmlNode; +} + +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work similarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +class MathNode { + constructor(type, children, classes) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.classes = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + this.classes = classes || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + + + getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + if (this.classes.length > 0) { + node.className = createClass(this.classes); + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + if (this.classes.length > 0) { + markup += " class =\"" + utils.escape(createClass(this.classes)) + "\""; + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + + + toText() { + return this.children.map(child => child.toText()).join(""); + } + +} +/** + * This node represents a piece of text. + */ + +class TextNode { + constructor(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + + + toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text itself). + */ + + + toText() { + return this.text; + } + +} +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +class SpaceNode { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200a"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200a"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200a\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205f\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", makeEm(this.width)); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + + + toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + } + +} + +var mathMLTree = { + MathNode, + TextNode, + SpaceNode, + newDocumentFragment +}; + +/** + * This file converts a parse tree into a corresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var makeText = function makeText(text, mode, options) { + if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === "tt" || options.font && options.font.slice(4, 6) === "tt"))) { + text = symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return group.type === "textord" ? "bold" : "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and calligraphic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (symbols[mode][text] && symbols[mode][text].replace) { + text = symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildGroup(expression[i], options); + + if (_group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + lastGroup.children.push(..._group.children); + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + lastGroup.children.push(..._group.children); + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + lastGroup.children.push(..._group.children); + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + // $FlowFixMe + var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe + + return result; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) { + var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes + // and add spacing nodes. This is necessary only adjacent to math operators + // like \sin or \lim or to subsup elements that contain math operators. + // MathML takes care of the other spacing issues. + // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); + + if (isDisplayMode) { + math.setAttribute("display", "block"); + } // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} + +var optionsFromSettings = function optionsFromSettings(settings) { + return new Options({ + style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree = function buildTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, settings.displayMode, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +var buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; + +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23df", + overbrace: "\u23de", + overgroup: "\u23e0", + undergroup: "\u23e1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21d2", + xRightarrow: "\u21d2", + overleftharpoon: "\u21bc", + xleftharpoonup: "\u21bc", + overrightharpoon: "\u21c0", + xrightharpoonup: "\u21c0", + xLeftarrow: "\u21d0", + xLeftrightarrow: "\u21d4", + xhookleftarrow: "\u21a9", + xhookrightarrow: "\u21aa", + xmapsto: "\u21a6", + xrightharpoondown: "\u21c1", + xleftharpoondown: "\u21bd", + xrightleftharpoons: "\u21cc", + xleftrightharpoons: "\u21cb", + xtwoheadleftarrow: "\u219e", + xtwoheadrightarrow: "\u21a0", + xlongequal: "=", + xtofrom: "\u21c4", + xrightleftarrows: "\u21c4", + xrightequilibrium: "\u21cc", + // Not a perfect match. + xleftequilibrium: "\u21cb", + // None better available. + "\\cdrightarrow": "\u2192", + "\\cdleftarrow": "\u2190", + "\\cdlongequal": "=" +}; + +var mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, '')])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + "\\cdrightarrow": [["rightarrow"], 3.0, 522, "xMaxYMin"], + // CD minwwidth2.5pc + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + "\\cdleftarrow": [["leftarrow"], 3.0, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + "\\cdlongequal": [["longequal"], 3.0, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.slice(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + // $FlowFixMe + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": makeEm(_height), + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var [paths, _minWidth, _viewBoxHeight] = data; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": makeEm(_height2), + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = makeEm(_height2); + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var { + span, + minWidth, + height + } = buildSvgSpan_(); // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + span.height = height; + span.style.height = makeEm(height); + + if (minWidth > 0) { + span.style.minWidth = makeEm(minWidth); + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, \fbox, or \angl + var img; + var totalHeight = inner.height + inner.depth + topPad + bottomPad; + + if (/fbox|color|angl/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": makeEm(totalHeight) + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = makeEm(totalHeight); + return img; +}; + +var stretchy = { + encloseSpan, + mathMLnode, + svgSpan +}; + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + if (!node || node.type !== type) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe, >=0.125 + + + return node; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +// also "supsub" since an accent can affect super/subscripting. +var htmlBuilder$a = (grp, options) => { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSubGroup; + + if (grp && grp.type === "supsub") { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(grp.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + grp.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base + + grp.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } + + var accentBelow = group.label === "\\c"; // calculate the amount of space between the body and the accent + + var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + + if (accentBelow) { + clearance += accent.depth; + } + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = makeEm(left); // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + makeEm(2 * skew) + ")", + marginLeft: makeEm(2 * skew) + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var mathmlBuilder$9 = (group, options) => { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => "\\" + accent).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + var base = normalizeArgument(args[0]); + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: true, + // unless in strict mode + argTypes: ["primitive"] + }, + handler: (context, args) => { + var base = args[0]; + var mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + context.funcName + " works only in text mode"); + mode = "text"; + } + + return { + type: "accent", + mode: mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: mathmlBuilder$9 +}); + +// Horizontal overlap functions +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: (group, options) => { + // Treat under accents much like underlines. + var innerGroup = buildGroup$1(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); + +// Helper function +var paddedNode = group => { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium", // The next 3 functions are here only to support the {CD} environment. + "\\\\cdrightarrow", "\\\\cdleftarrow", "\\\\cdlongequal"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + + // Flow is unable to correctly infer the type of `group`, even though it's + // unambiguously determined from the passed-in `type` above. + htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options); + var arrowPrefix = group.label.slice(0, 2) === "\\x" ? "x" : "cd"; + upperGroup.classes.push(arrowPrefix + "-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options); + lowerGroup.classes.push(arrowPrefix + "-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + arrowNode.setAttribute("minsize", group.label.charAt(0) === "x" ? "1.75em" : "3.0em"); + var node; + + if (group.body) { + var upperNode = paddedNode(buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = paddedNode(buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = paddedNode(buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } + +}); + +var makeSpan = buildCommon.makeSpan; + +function htmlBuilder$9(group, options) { + var elements = buildExpression$1(group.body, options, true); + return makeSpan([group.mclass], elements, options); +} + +function mathmlBuilder$8(group, options) { + var node; + var inner = buildExpression(group.body, options); + + if (group.mclass === "minner") { + node = new mathMLTree.MathNode("mpadded", inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } else if (group.mclass === "minner") { + node.attributes.lspace = "0.0556em"; // 1 mu is the most likely option + + node.attributes.width = "+0.1111em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1, + primitive: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.slice(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); +var binrelClass = arg => { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[1]), + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } + +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + + handler(_ref3, args) { + var { + parser, + funcName + } = _ref3; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$8 +}); + +// \pmb is a simulation of bold font. +// The version of \pmb in ambsy.sty works by typesetting three copies +// with small offsets. We use CSS text-shadow. +// It's a hack. Not as good as a real bold font. Better than nothing. +defineFunction({ + type: "pmb", + names: ["\\pmb"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "pmb", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: ordargument(args[0]) + }; + }, + + htmlBuilder(group, options) { + var elements = buildExpression$1(group.body, options, true); + var node = buildCommon.makeSpan([group.mclass], elements, options); + node.style.textShadow = "0.02em 0.01em 0.04px"; + return node; + }, + + mathmlBuilder(group, style) { + var inner = buildExpression(group.body, style); // Wrap with an element. + + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"); + return node; + } + +}); + +var cdArrowFunctionName = { + ">": "\\\\cdrightarrow", + "<": "\\\\cdleftarrow", + "=": "\\\\cdlongequal", + "A": "\\uparrow", + "V": "\\downarrow", + "|": "\\Vert", + ".": "no arrow" +}; + +var newCell = () => { + // Create an empty cell, to be filled below with parse nodes. + // The parseTree from this module must be constructed like the + // one created by parseArray(), so an empty CD cell must + // be a ParseNode<"styling">. And CD is always displaystyle. + // So these values are fixed and flow can do implicit typing. + return { + type: "styling", + body: [], + mode: "math", + style: "display" + }; +}; + +var isStartOfArrow = node => { + return node.type === "textord" && node.text === "@"; +}; + +var isLabelEnd = (node, endChar) => { + return (node.type === "mathord" || node.type === "atom") && node.text === endChar; +}; + +function cdArrow(arrowChar, labels, parser) { + // Return a parse tree of an arrow and its labels. + // This acts in a way similar to a macro expansion. + var funcName = cdArrowFunctionName[arrowChar]; + + switch (funcName) { + case "\\\\cdrightarrow": + case "\\\\cdleftarrow": + return parser.callFunction(funcName, [labels[0]], [labels[1]]); + + case "\\uparrow": + case "\\downarrow": + { + var leftLabel = parser.callFunction("\\\\cdleft", [labels[0]], []); + var bareArrow = { + type: "atom", + text: funcName, + mode: "math", + family: "rel" + }; + var sizedArrow = parser.callFunction("\\Big", [bareArrow], []); + var rightLabel = parser.callFunction("\\\\cdright", [labels[1]], []); + var arrowGroup = { + type: "ordgroup", + mode: "math", + body: [leftLabel, sizedArrow, rightLabel] + }; + return parser.callFunction("\\\\cdparent", [arrowGroup], []); + } + + case "\\\\cdlongequal": + return parser.callFunction("\\\\cdlongequal", [], []); + + case "\\Vert": + { + var arrow = { + type: "textord", + text: "\\Vert", + mode: "math" + }; + return parser.callFunction("\\Big", [arrow], []); + } + + default: + return { + type: "textord", + text: " ", + mode: "math" + }; + } +} + +function parseCD(parser) { + // Get the array's parse nodes with \\ temporarily mapped to \cr. + var parsedRows = []; + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + parser.gullet.beginGroup(); + + while (true) { + // eslint-disable-line no-constant-condition + // Get the parse nodes for the next row. + parsedRows.push(parser.parseExpression(false, "\\\\")); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + var next = parser.fetch().text; + + if (next === "&" || next === "\\\\") { + parser.consume(); + } else if (next === "\\end") { + if (parsedRows[parsedRows.length - 1].length === 0) { + parsedRows.pop(); // final row ended in \\ + } + + break; + } else { + throw new ParseError("Expected \\\\ or \\cr or \\end", parser.nextToken); + } + } + + var row = []; + var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows. + + for (var i = 0; i < parsedRows.length; i++) { + // Start a new row. + var rowNodes = parsedRows[i]; // Create the first cell. + + var cell = newCell(); + + for (var j = 0; j < rowNodes.length; j++) { + if (!isStartOfArrow(rowNodes[j])) { + // If a parseNode is not an arrow, it goes into a cell. + cell.body.push(rowNodes[j]); + } else { + // Parse node j is an "@", the start of an arrow. + // Before starting on the arrow, push the cell into `row`. + row.push(cell); // Now collect parseNodes into an arrow. + // The character after "@" defines the arrow type. + + j += 1; + var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them. + + var labels = new Array(2); + labels[0] = { + type: "ordgroup", + mode: "math", + body: [] + }; + labels[1] = { + type: "ordgroup", + mode: "math", + body: [] + }; // Process the arrow. + + if ("=|.".indexOf(arrowChar) > -1) ; else if ("<>AV".indexOf(arrowChar) > -1) { + // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take + // two optional labels. E.g. the right-point arrow syntax is + // really: @>{optional label}>{optional label}> + // Collect parseNodes into labels. + for (var labelNum = 0; labelNum < 2; labelNum++) { + var inLabel = true; + + for (var k = j + 1; k < rowNodes.length; k++) { + if (isLabelEnd(rowNodes[k], arrowChar)) { + inLabel = false; + j = k; + break; + } + + if (isStartOfArrow(rowNodes[k])) { + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[k]); + } + + labels[labelNum].body.push(rowNodes[k]); + } + + if (inLabel) { + // isLabelEnd never returned a true. + throw new ParseError("Missing a " + arrowChar + " character to complete a CD arrow.", rowNodes[j]); + } + } + } else { + throw new ParseError("Expected one of \"<>AV=|.\" after @", rowNodes[j]); + } // Now join the arrow to its labels. + + + var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<"styling">. + // This is done to match parseArray() behavior. + + var wrappedArrow = { + type: "styling", + body: [arrow], + mode: "math", + style: "display" // CD is always displaystyle. + + }; + row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that + // is not an arrow gets collected into a cell. So create an empty + // cell now. It will collect upcoming parseNodes. + + cell = newCell(); + } + } + + if (i % 2 === 0) { + // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell + // The last cell is not yet pushed into `row`, so: + row.push(cell); + } else { + // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow + // Remove the empty cell that was placed at the beginning of `row`. + row.shift(); + } + + row = []; + body.push(row); + } // End row group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); // define column separation. + + var cols = new Array(body[0].length).fill({ + type: "align", + align: "c", + pregap: 0.25, + // CD package sets \enskip between columns. + postgap: 0.25 // So pre and post each get half an \enskip, i.e. 0.25em. + + }); + return { + type: "array", + mode: "math", + body, + arraystretch: 1, + addJot: true, + rowGaps: [null], + cols, + colSeparationType: "CD", + hLinesBeforeRow: new Array(body.length + 1).fill([]) + }; +} // The functions below are not available for general use. +// They are here only for internal use by the {CD} environment in placing labels +// next to vertical arrows. +// We don't need any such functions for horizontal arrows because we can reuse +// the functionality that already exists for extensible arrows. + +defineFunction({ + type: "cdlabel", + names: ["\\\\cdleft", "\\\\cdright"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "cdlabel", + mode: parser.mode, + side: funcName.slice(4), + label: args[0] + }; + }, + + htmlBuilder(group, options) { + var newOptions = options.havingStyle(options.style.sup()); + var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options); + label.classes.push("cd-label-" + group.side); + label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set + // by the arrow height, not by the label. + + label.height = 0; + label.depth = 0; + return label; + }, + + mathmlBuilder(group, options) { + var label = new mathMLTree.MathNode("mrow", [buildGroup(group.label, options)]); + label = new mathMLTree.MathNode("mpadded", [label]); + label.setAttribute("width", "0"); + + if (group.side === "left") { + label.setAttribute("lspace", "-1width"); + } // We have to guess at vertical alignment. We know the arrow is 1.8em tall, + // But we don't know the height or depth of the label. + + + label.setAttribute("voffset", "0.7em"); + label = new mathMLTree.MathNode("mstyle", [label]); + label.setAttribute("displaystyle", "false"); + label.setAttribute("scriptlevel", "1"); + return label; + } + +}); +defineFunction({ + type: "cdlabelparent", + names: ["\\\\cdparent"], + props: { + numArgs: 1 + }, + + handler(_ref2, args) { + var { + parser + } = _ref2; + return { + type: "cdlabelparent", + mode: parser.mode, + fragment: args[0] + }; + }, + + htmlBuilder(group, options) { + // Wrap the vertical arrow and its labels. + // The parent gets position: relative. The child gets position: absolute. + // So CSS can locate the label correctly. + var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options); + parent.classes.push("cd-vert-arrow"); + return parent; + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", [buildGroup(group.fragment, options)]); + } + +}); + +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + var text; + + if (isNaN(code)) { + throw new ParseError("\\@char has non-numeric argument " + number); // If we drop IE support, the following code could be replaced with + // text = String.fromCodePoint(code) + } else if (code < 0 || code >= 0x10ffff) { + throw new ParseError("\\@char with invalid code point " + number); + } else if (code <= 0xffff) { + text = String.fromCharCode(code); + } else { + // Astral code point; split into surrogate halves + code -= 0x10000; + text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00); + } + + return { + type: "textord", + mode: parser.mode, + text: text + }; + } + +}); + +var htmlBuilder$8 = (group, options) => { + var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var mathmlBuilder$7 = (group, options) => { + var inner = buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"] + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color, + body: ordargument(body) + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + argTypes: ["color"] + }, + + handler(_ref2, args) { + var { + parser, + breakOnTokenText + } = _ref2; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color, + body + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$7 +}); + +// Row breaks within tabular environments, and line breaks at top level + +defineFunction({ + type: "cr", + names: ["\\\\"], + props: { + numArgs: 0, + numOptionalArgs: 0, + allowedInText: true + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null; + var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode"); + return { + type: "cr", + mode: parser.mode, + newLine, + size: size && assertNodeType(size, "size").value + }; + }, + + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder(group, options) { + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = makeEm(calculateSize(group.size, options)); + } + } + + return span; + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", makeEm(calculateSize(group.size, options))); + } + } + + return node; + } + +}); + +var globalMap = { + "\\global": "\\global", + "\\long": "\\\\globallong", + "\\\\globallong": "\\\\globallong", + "\\def": "\\gdef", + "\\gdef": "\\gdef", + "\\edef": "\\xdef", + "\\xdef": "\\xdef", + "\\let": "\\\\globallet", + "\\futurelet": "\\\\globalfuture" +}; + +var checkControlSequence = tok => { + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + return name; +}; + +var getRHS = parser => { + var tok = parser.gullet.popToken(); + + if (tok.text === "=") { + // consume optional equals + tok = parser.gullet.popToken(); + + if (tok.text === " ") { + // consume one optional space + tok = parser.gullet.popToken(); + } + } + + return tok; +}; + +var letCommand = (parser, name, tok, global) => { + var macro = parser.gullet.macros.get(tok.text); + + if (macro == null) { + // don't expand it later even if a macro with the same name is defined + // e.g., \let\foo=\frac \def\frac{\relax} \frac12 + tok.noexpand = true; + macro = { + tokens: [tok], + numArgs: 0, + // reproduce the same behavior in expansion + unexpandable: !parser.gullet.isExpandable(tok.text) + }; + } + + parser.gullet.macros.set(name, macro, global); +}; // -> | +// -> |\global +// -> | +// -> \global|\long|\outer + + +defineFunction({ + type: "internal", + names: ["\\global", "\\long", "\\\\globallong" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref) { + var { + parser, + funcName + } = _ref; + parser.consumeSpaces(); + var token = parser.fetch(); + + if (globalMap[token.text]) { + // KaTeX doesn't have \par, so ignore \long + if (funcName === "\\global" || funcName === "\\\\globallong") { + token.text = globalMap[token.text]; + } + + return assertNodeType(parser.parseFunction(), "internal"); + } + + throw new ParseError("Invalid token after macro prefix", token); + } + +}); // Basic support for macro definitions: \def, \gdef, \edef, \xdef +// -> +// -> \def|\gdef|\edef|\xdef +// -> + +defineFunction({ + type: "internal", + names: ["\\def", "\\gdef", "\\edef", "\\xdef"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref2) { + var { + parser, + funcName + } = _ref2; + var tok = parser.gullet.popToken(); + var name = tok.text; + + if (/^(?:[\\{}$&#^_]|EOF)$/.test(name)) { + throw new ParseError("Expected a control sequence", tok); + } + + var numArgs = 0; + var insert; + var delimiters = [[]]; // contains no braces + + while (parser.gullet.future().text !== "{") { + tok = parser.gullet.popToken(); + + if (tok.text === "#") { + // If the very last character of the is #, so that + // this # is immediately followed by {, TeX will behave as if the { + // had been inserted at the right end of both the parameter text + // and the replacement text. + if (parser.gullet.future().text === "{") { + insert = parser.gullet.future(); + delimiters[numArgs].push("{"); + break; + } // A parameter, the first appearance of # must be followed by 1, + // the next by 2, and so on; up to nine #’s are allowed + + + tok = parser.gullet.popToken(); + + if (!/^[1-9]$/.test(tok.text)) { + throw new ParseError("Invalid argument number \"" + tok.text + "\""); + } + + if (parseInt(tok.text) !== numArgs + 1) { + throw new ParseError("Argument number \"" + tok.text + "\" out of order"); + } + + numArgs++; + delimiters.push([]); + } else if (tok.text === "EOF") { + throw new ParseError("Expected a macro definition"); + } else { + delimiters[numArgs].push(tok.text); + } + } // replacement text, enclosed in '{' and '}' and properly nested + + + var { + tokens + } = parser.gullet.consumeArg(); + + if (insert) { + tokens.unshift(insert); + } + + if (funcName === "\\edef" || funcName === "\\xdef") { + tokens = parser.gullet.expandTokens(tokens); + tokens.reverse(); // to fit in with stack order + } // Final arg is the expansion of the macro + + + parser.gullet.macros.set(name, { + tokens, + numArgs, + delimiters + }, funcName === globalMap[funcName]); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // -> +// -> \futurelet +// | \let +// -> |= + +defineFunction({ + type: "internal", + names: ["\\let", "\\\\globallet" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + var name = checkControlSequence(parser.gullet.popToken()); + parser.gullet.consumeSpaces(); + var tok = getRHS(parser); + letCommand(parser, name, tok, funcName === "\\\\globallet"); + return { + type: "internal", + mode: parser.mode + }; + } + +}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf + +defineFunction({ + type: "internal", + names: ["\\futurelet", "\\\\globalfuture" // can’t be entered directly + ], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + var name = checkControlSequence(parser.gullet.popToken()); + var middle = parser.gullet.popToken(); + var tok = parser.gullet.popToken(); + letCommand(parser, name, tok, funcName === "\\\\globalfuture"); + parser.gullet.pushToken(tok); + parser.gullet.pushToken(middle); + return { + type: "internal", + mode: parser.mode + }; + } + +}); + +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font, mode) { + var replace = symbols.math[symbol] && symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = makeEm(shift); + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes); + + if (center) { + centerSpan(span, options, Style$1.TEXT); + } + + return span; +}; +/** + * Make a span from a font glyph with the given offset and in the given font. + * This is used in makeStackedDelim to make the stacking pieces for the delimiter. + */ + + +var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var corner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: corner + }; +}; + +var makeInner = function makeInner(ch, height, options) { + // Create a span with inline SVG for the inner part of a tall stacked delimiter. + var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4]; + var path = new PathNode("inner", innerPath(ch, Math.round(1000 * height))); + var svgNode = new SvgNode([path], { + "width": makeEm(width), + "height": makeEm(height), + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + makeEm(width), + "viewBox": "0 0 " + 1000 * width + " " + Math.round(1000 * height), + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon.makeSvgSpan([], [svgNode], options); + span.height = height; + span.style.height = makeEm(height); + span.style.width = makeEm(width); + return { + type: "elem", + elem: span + }; +}; // Helpers for makeStackedDelim + + +var lapInEms = 0.008; +var lap = { + type: "kern", + size: -1 * lapInEms +}; +var verts = ["|", "\\lvert", "\\rvert", "\\vert"]; +var doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"]; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + var svgLabel = ""; + var viewBoxWidth = 0; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (utils.contains(verts, delim)) { + repeat = "\u2223"; + svgLabel = "vert"; + viewBoxWidth = 333; + } else if (utils.contains(doubleVerts, delim)) { + repeat = "\u2225"; + svgLabel = "doublevert"; + viewBoxWidth = 556; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lbrack"; + viewBoxWidth = 667; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rbrack"; + viewBoxWidth = 667; + } else if (delim === "\\lfloor" || delim === "\u230a") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + svgLabel = "lfloor"; + viewBoxWidth = 667; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + svgLabel = "lceil"; + viewBoxWidth = 667; + } else if (delim === "\\rfloor" || delim === "\u230b") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + svgLabel = "rfloor"; + viewBoxWidth = 667; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + svgLabel = "rceil"; + viewBoxWidth = 667; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + svgLabel = "lparen"; + viewBoxWidth = 875; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + svgLabel = "rparen"; + viewBoxWidth = 875; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27ee") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27ef") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23b0") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23b1") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calculate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist + // Keep a list of the pieces of the stacked delimiter + + var stack = []; + + if (svgLabel.length > 0) { + // Instead of stacking glyphs, create a single SVG. + // This evades browser problems with imprecise positioning of spans. + var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; + var viewBoxHeight = Math.round(realHeightTotal * 1000); + var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000)); + var path = new PathNode(svgLabel, pathStr); + var width = (viewBoxWidth / 1000).toFixed(3) + "em"; + var height = (viewBoxHeight / 1000).toFixed(3) + "em"; + var svg = new SvgNode([path], { + "width": width, + "height": height, + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight + }); + var wrapper = buildCommon.makeSvgSpan([], [svg], options); + wrapper.height = viewBoxHeight / 1000; + wrapper.style.width = width; + wrapper.style.height = height; + stack.push({ + type: "elem", + elem: wrapper + }); + } else { + // Stack glyphs + // Start by adding the bottom symbol + stack.push(makeGlyphSpan(bottom, font, mode)); + stack.push(lap); // overlap + + if (middle === null) { + // The middle section will be an SVG. Make it an extra 0.016em tall. + // We'll overlap by 0.008em at top and bottom. + var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms; + stack.push(makeInner(repeat, innerHeight, options)); + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms; + + stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace. + + stack.push(lap); + stack.push(makeGlyphSpan(middle, font, mode)); + stack.push(lap); + stack.push(makeInner(repeat, _innerHeight, options)); + } // Add the top symbol + + + stack.push(lap); + stack.push(makeGlyphSpan(top, font, mode)); + } // Finally, build the vlist + + + var newOptions = options.havingBaseStyle(Style$1.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: stack + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes); +}; // All surds have 0.08em padding above the vinculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) { + var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight); + var pathNode = new PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": makeEm(height), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick vinculum. + // If Settings.minRuleThickness is larger than that, we add extraVinculum. + + var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the vinculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraVinculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraVinculum + emPad; + texHeight = height + extraVinculum; + viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraVinculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = makeEm(spanHeight); + return { + span, + advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +var delimiter = { + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + sizeToMaxHeight: sizeToMaxHeight, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else if (symDelim) { + throw new ParseError("Invalid delimiter '" + symDelim.text + "' after '" + context.funcName + "'", delim); + } else { + throw new ParseError("Invalid delimiter type '" + delim.type + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1, + argTypes: ["primitive"] + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: group => { + var children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + node.setAttribute("stretchy", "true"); + var size = makeEm(delimiter.sizeToMaxHeight[group.size]); + node.setAttribute("minsize", size); + node.setAttribute("maxsize", size); + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: (group, options) => { + assertParsed(group); // Build the inner expression + + var inner = buildExpression$1(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: (group, options) => { + assertParsed(group); + var inner = buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1, + primitive: true + }, + handler: (context, args) => { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: (group, options) => { + // A Firefox \middle will stretch a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); + +var htmlBuilder$7 = (group, options) => { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox, \phase + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options); + var label = group.label.slice(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else if (label === "phase") { + // Set a couple of dimensions from the steinmetz package. + var lineWeight = calculateSize({ + number: 0.6, + unit: "pt" + }, options); + var clearance = calculateSize({ + number: 0.35, + unit: "ex" + }, options); // Prevent size changes like \Huge from affecting line thickness + + var newOptions = options.havingBaseSizing(); + scale = scale / newOptions.sizeMultiplier; + var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle. + + inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG + + var viewBoxHeight = Math.floor(1000 * angleHeight * scale); + var path = phasePath(viewBoxHeight); + var svgNode = new SvgNode([new PathNode("phase", path)], { + "width": "400em", + "height": makeEm(viewBoxHeight / 1000), + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); // Wrap it in a span with overflow: hidden. + + img = buildCommon.makeSvgSpan(["hide-tail"], [svgNode], options); + img.style.height = makeEm(angleHeight); + imgShift = inner.depth + lineWeight + clearance; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else if (label === "angl") { + inner.classes.push("anglpad"); + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var topPad = 0; + var bottomPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + topPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + bottomPad = topPad; + } else if (label === "angl") { + ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself. + + bottomPad = Math.max(0, 0.25 - inner.depth); + } else { + topPad = isSingleChar ? 0.2 : 0; + bottomPad = topPad; + } + + img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = makeEm(ruleThickness); + } else if (label === "angl" && ruleThickness !== 0.049) { + img.style.borderTopWidth = makeEm(ruleThickness); + img.style.borderRightWidth = makeEm(ruleThickness); + } + + imgShift = inner.depth + bottomPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + var classes = /cancel|phase/.test(label) ? ["svg-align"] : []; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: classes + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var mathmlBuilder$6 = (group, options) => { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\phase": + node.setAttribute("notation", "phasorangle"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\angl": + node.setAttribute("notation", "actuarial"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "text"] + }, + + handler(_ref, args, optArgs) { + var { + parser, + funcName + } = _ref; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + argTypes: ["color", "color", "text"] + }, + + handler(_ref2, args, optArgs) { + var { + parser, + funcName + } = _ref2; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor, + borderColor, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + + handler(_ref3, args) { + var { + parser + } = _ref3; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } + +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"], + props: { + numArgs: 1 + }, + + handler(_ref4, args) { + var { + parser, + funcName + } = _ref4; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$6 +}); +defineFunction({ + type: "enclose", + names: ["\\angl"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: false + }, + + handler(_ref5, args) { + var { + parser + } = _ref5; + return { + type: "enclose", + mode: parser.mode, + label: "\\angl", + body: args[0] + }; + } + +}); + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var { + type, + names, + props, + handler, + htmlBuilder, + mathmlBuilder + } = _ref; + // Set default values of environments. + var data = { + type, + numArgs: props.numArgs || 0, + allowedInText: false, + numOptionalArgs: 0, + handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} + +/** + * All registered global/built-in macros. + * `macros.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `macros.js`. + */ +var _macros = {}; // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + _macros[name] = body; +} + +// Helper functions +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + if (nxt === "\\relax") { + // \relax is an artifact of the \cr macro below + parser.consume(); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} + +var validateAmsEnvironmentContext = context => { + var settings = context.parser.settings; + + if (!settings.displayMode) { + throw new ParseError("{" + context.envName + "} can be used only in" + " display mode."); + } +}; // autoTag (an argument to parseArray) can be one of three values: +// * undefined: Regular (not-top-level) array; no tags on each row +// * true: Automatic equation numbering, overridable by \tag +// * false: Tags allowed on each row, but no automatic numbering +// This function *doesn't* work with the "split" environment name. + + +function getAutoTag(name) { + if (name.indexOf("ed") === -1) { + return name.indexOf("*") === -1; + } // return undefined; + +} +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var { + hskipBeforeAndAfter, + addJot, + cols, + arraystretch, + colSeparationType, + autoTag, + singleRow, + emptySingleRow, + maxNumCols, + leqno + } = _ref; + parser.gullet.beginGroup(); + + if (!singleRow) { + // \cr is equivalent to \\ without the optional size argument (see below) + // TODO: provide helpful error when \cr is used outside array environment + parser.gullet.macros.set("\\cr", "\\\\\\relax"); + } // Get current arraystretch if it's not set by the environment + + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; + var tags = autoTag != null ? [] : undefined; // amsmath uses \global\@eqnswtrue and \global\@eqnswfalse to represent + // whether this row should have an equation number. Simulate this with + // a \@eqnsw macro set to 1 or 0. + + function beginRow() { + if (autoTag) { + parser.gullet.macros.set("\\@eqnsw", "1", true); + } + } + + function endRow() { + if (tags) { + if (parser.gullet.macros.get("\\df@tag")) { + tags.push(parser.subparse([new Token("\\df@tag")])); + parser.gullet.macros.set("\\df@tag", undefined, true); + } else { + tags.push(Boolean(autoTag) && parser.gullet.macros.get("\\@eqnsw") === "1"); + } + } + } + + beginRow(); // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, singleRow ? "\\end" : "\\\\"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + if (maxNumCols && row.length === maxNumCols) { + if (singleRow || colSeparationType) { + // {equation} or {split} + throw new ParseError("Too many tab characters: &", parser.nextToken); + } else { + // {array} environment + parser.settings.reportNonstrict("textEnv", "Too few columns " + "specified in the {array} column argument."); + } + } + + parser.consume(); + } else if (next === "\\end") { + endRow(); // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. However, AMS environments keep the + // empty row if it's the only one. + // NOTE: Currently, `cell` is the last item added into `row`. + + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\\\") { + parser.consume(); + var size = void 0; // \def\Let@{\let\\\math@cr} + // \def\math@cr{...\math@cr@} + // \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} + // \def\math@cr@@[#1]{...\math@cr@@@...} + // \def\math@cr@@@{\cr} + + if (parser.gullet.future().text !== " ") { + size = parser.parseSizeGroup(true); + } + + rowGaps.push(size ? size.value : null); + endRow(); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + beginRow(); + } else { + throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \cr + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot, + arraystretch, + body, + cols, + rowGaps, + hskipBeforeAndAfter, + hLinesBeforeRow, + colSeparationType, + tags, + leqno + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.slice(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var htmlBuilder$6 = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = group.colSeparationType === "CD" ? calculateSize({ + number: 3, + unit: "ex" + }, options) : 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildGroup$1(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + var tagSpans = []; + + if (group.tags && group.tags.some(tag => tag)) { + // An environment with manual tags and/or automatic equation numbers. + // Create node(s), the latter of which trigger CSS counter increment. + for (r = 0; r < nr; ++r) { + var rw = body[r]; + var shift = rw.pos - offset; + var tag = group.tags[r]; + var tagSpan = void 0; + + if (tag === true) { + // automatic numbering + tagSpan = buildCommon.makeSpan(["eqn-num"], [], options); + } else if (tag === false) { + // \nonumber/\notag or starred environment + tagSpan = buildCommon.makeSpan([], [], options); + } else { + // manual \tag + tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options); + } + + tagSpan.depth = rw.depth; + tagSpan.height = rw.height; + tagSpans.push({ + type: "elem", + elem: tagSpan, + shift + }); + } + } + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep); + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = makeEm(totalHeight); + separator.style.borderRightWidth = makeEm(ruleThickness); + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 " + makeEm(-ruleThickness / 2); + + var _shift = totalHeight - offset; + + if (_shift) { + separator.style.verticalAlign = makeEm(-_shift); + } + + cols.push(separator); + } else { + throw new ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var _shift2 = row.pos - offset; + + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: _shift2 + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = makeEm(sepwidth); + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + if (tagSpans.length === 0) { + return buildCommon.makeSpan(["mord"], [body], options); + } else { + var eqnNumCol = buildCommon.makeVList({ + positionType: "individualShift", + children: tagSpans + }, options); + eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options); + return buildCommon.makeFragment([body, eqnNumCol]); + } +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var mathmlBuilder$5 = function mathmlBuilder(group, options) { + var tbl = []; + var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]); + var tag = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]); + + for (var i = 0; i < group.body.length; i++) { + var rw = group.body[i]; + var row = []; + + for (var j = 0; j < rw.length; j++) { + row.push(new mathMLTree.MathNode("mtd", [buildGroup(rw[j], options)])); + } + + if (group.tags && group.tags[i]) { + row.unshift(glue); + row.push(glue); + + if (group.leqno) { + row.unshift(tag); + } else { + row.push(tag); + } + } + + tbl.push(new mathMLTree.MathNode("mtr", row)); + } + + var table = new mathMLTree.MathNode("mtable", tbl); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found empirically. They produce an array + // similar to LaTeX and in which content does not interfere with \hlines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", makeEm(gap)); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols && group.cols.length > 0) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var _i = iStart; _i < iEnd; _i++) { + if (cols[_i].type === "align") { + align += alignMap[cols[_i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[_i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[_i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i2 = 1; _i2 < _cols.length; _i2++) { + spacing += _i2 % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat" || group.colSeparationType === "gather") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else if (group.colSeparationType === "CD") { + table.setAttribute("columnspacing", "0.5em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) { + rowLines += hlines[_i3].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i3][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat. + + +var alignedHandler = function alignedHandler(context, args) { + if (context.envName.indexOf("ed") === -1) { + validateAmsEnvironmentContext(context); + } + + var cols = []; + var separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + var isSplit = context.envName === "split"; + var res = parseArray(context.parser, { + cols, + addJot: true, + autoTag: isSplit ? undefined : getAutoTag(context.envName), + emptySingleRow: true, + colSeparationType: separationType, + maxNumCols: isSplit ? 2 : undefined, + leqno: context.parser.settings.leqno + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + + if (args[0] && args[0].type === "ordgroup") { + var arg0 = ""; + + for (var i = 0; i < args[0].body.length; i++) { + var textord = assertNodeType(args[0].body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i4 = 1; _i4 < row.length; _i4 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i4], "styling"); + var ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i5 = 0; _i5 < numCols; ++_i5) { + var align = "r"; + var pregap = 0; + + if (_i5 % 2 === 1) { + align = "l"; + } else if (_i5 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i5] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols, + hskipBeforeAndAfter: true, + // \@preamble in lttab.dtx + maxNumCols: cols.length + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. +// The mathtools package adds starred versions of the same environments. +// These have an optional argument to choose left|center|right justification. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"], + props: { + numArgs: 0 + }, + + handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName.replace("*", "")]; // \hskip -\arraycolsep in amsmath + + var colAlign = "c"; + var payload = { + hskipBeforeAndAfter: false, + cols: [{ + type: "align", + align: colAlign + }] + }; + + if (context.envName.charAt(context.envName.length - 1) === "*") { + // It's one of the mathtools starred functions. + // Parse the optional alignment argument. + var parser = context.parser; + parser.consumeSpaces(); + + if (parser.fetch().text === "[") { + parser.consume(); + parser.consumeSpaces(); + colAlign = parser.fetch().text; + + if ("lcr".indexOf(colAlign) === -1) { + throw new ParseError("Expected l or c or r", parser.nextToken); + } + + parser.consume(); + parser.consumeSpaces(); + parser.expect("]"); + parser.consume(); + payload.cols = [{ + type: "align", + align: colAlign + }]; + } + } + + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs. + + var numCols = Math.max(0, ...res.body.map(row => row.length)); + res.cols = new Array(numCols).fill({ + type: "align", + align: colAlign + }); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + var res = { + cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body.length > 0 && res.body[0].length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + return res; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +// {rcases} is another mathtools environment. It's brace is on the right side. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases", "rcases", "drcases"], + props: { + numArgs: 0 + }, + + handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: context.envName.indexOf("r") > -1 ? "." : "\\{", + right: context.envName.indexOf("r") > -1 ? "\\}" : ".", + rightColor: undefined + }; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["align", "align*", "aligned", "split"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered", "gather", "gather*"], + props: { + numArgs: 0 + }, + + handler(context) { + if (utils.contains(["gather", "gather*"], context.envName)) { + validateAmsEnvironmentContext(context); + } + + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true, + colSeparationType: "gather", + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignat", "alignat*", "alignedat"], + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["equation", "equation*"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + var res = { + autoTag: getAutoTag(context.envName), + emptySingleRow: true, + singleRow: true, + maxNumCols: 1, + leqno: context.parser.settings.leqno + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineEnvironment({ + type: "array", + names: ["CD"], + props: { + numArgs: 0 + }, + + handler(context) { + validateAmsEnvironmentContext(context); + return parseCD(context.parser); + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$5 +}); +defineMacro("\\nonumber", "\\gdef\\@eqnsw{0}"); +defineMacro("\\notag", "\\nonumber"); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + + handler(context, args) { + throw new ParseError(context.funcName + " valid only within array environment"); + } + +}); + +var environments = _environments; + +// defineEnvironment definitions. + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!environments.hasOwnProperty(envName)) { + throw new ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = environments[envName]; + var { + args: _args, + optArgs + } = parser.parseArguments("\\begin{" + envName + "}", env); + var context = { + mode: parser.mode, + envName, + parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } // $FlowFixMe, "environment" handler returns an environment ParseNode + + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup + }; + } + +}); + +// TODO(kevinb): implement \\sl and \\sc + +var htmlBuilder$5 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup$1(group.body, newOptions); +}; + +var mathmlBuilder$4 = (group, options) => { + var font = group.font; + var newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = normalizeArgument(args[0]); + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1 + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser, + funcName, + breakOnTokenText + } = _ref3; + var { + mode + } = parser; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body + } + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$4 +}); + +var adjustStyle = (size, originalStyle) => { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY; + } else if (size === "text" && style.size === Style$1.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = Style$1.TEXT; + } else if (size === "script") { + style = Style$1.SCRIPT; + } else if (size === "scriptscript") { + style = Style$1.SCRIPTSCRIPT; + } + + return style; +}; + +var htmlBuilder$4 = (group, options) => { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildGroup$1(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildGroup$1(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === Style$1.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === Style$1.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else if (style.size === Style$1.SCRIPTSCRIPT.size) { + delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var mathmlBuilder$3 = (group, options) => { + var node = new mathMLTree.MathNode("mfrac", [buildGroup(group.numer, options), buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", makeEm(ruleWidth)); + } + + var style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac" // ditto + ], + props: { + numArgs: 2, + allowedInArgument: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: false, + numer, + denom, + hasBarLine, + leftDelim, + rightDelim, + size, + barSize: null + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); +defineFunction({ + type: "genfrac", + names: ["\\cfrac"], + props: { + numArgs: 2 + }, + handler: (_ref2, args) => { + var { + parser, + funcName + } = _ref2; + var numer = args[0]; + var denom = args[1]; + return { + type: "genfrac", + mode: parser.mode, + continued: true, + numer, + denom, + hasBarLine: true, + leftDelim: null, + rightDelim: null, + size: "display", + barSize: null + }; + } +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + + handler(_ref3) { + var { + parser, + funcName, + token + } = _ref3; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith, + token + }; + } + +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + allowedInArgument: true, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + + handler(_ref4, args) { + var { + parser + } = _ref4; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = normalizeArgument(args[0]); + var leftDelim = leftNode.type === "atom" && leftNode.family === "open" ? delimFromValue(leftNode.text) : null; + var rightNode = normalizeArgument(args[1]); + var rightDelim = rightNode.type === "atom" && rightNode.family === "close" ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = args[3]; + + if (styl.type === "ordgroup") { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(styl, "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim, + rightDelim, + size + }; + }, + + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + + handler(_ref5, args) { + var { + parser, + funcName, + token + } = _ref5; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token + }; + } + +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: (_ref6, args) => { + var { + parser, + funcName + } = _ref6; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$3 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +// also "supsub" since an over/underbrace can affect super/subscripting. +var htmlBuilder$3 = (grp, options) => { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + + if (grp.type === "supsub") { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(grp.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var mathmlBuilder$2 = (group, options) => { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$2 +}); + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: (group, options) => { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + } +}); + +// In LaTeX, \vcenter can act only on a box, as in +// \vcenter{\hbox{$\frac{a+b}{\dfrac{c}{d}}$}} +// This function by itself doesn't do anything but prevent a soft line break. + +defineFunction({ + type: "hbox", + names: ["\\hbox"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "hbox", + mode: parser.mode, + body: ordargument(args[0]) + }; + }, + + htmlBuilder(group, options) { + var elements = buildExpression$1(group.body, options, false); + return buildCommon.makeFragment(elements); + }, + + mathmlBuilder(group, options) { + return new mathMLTree.MathNode("mrow", buildExpression(group.body, options)); + } + +}); + +defineFunction({ + type: "html", + names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"], + props: { + numArgs: 2, + argTypes: ["raw", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName, + token + } = _ref; + var value = assertNodeType(args[0], "raw").string; + var body = args[1]; + + if (parser.settings.strict) { + parser.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode"); + } + + var trustContext; + var attributes = {}; + + switch (funcName) { + case "\\htmlClass": + attributes.class = value; + trustContext = { + command: "\\htmlClass", + class: value + }; + break; + + case "\\htmlId": + attributes.id = value; + trustContext = { + command: "\\htmlId", + id: value + }; + break; + + case "\\htmlStyle": + attributes.style = value; + trustContext = { + command: "\\htmlStyle", + style: value + }; + break; + + case "\\htmlData": + { + var data = value.split(","); + + for (var i = 0; i < data.length; i++) { + var keyVal = data[i].split("="); + + if (keyVal.length !== 2) { + throw new ParseError("Error parsing key-value for \\htmlData"); + } + + attributes["data-" + keyVal[0].trim()] = keyVal[1].trim(); + } + + trustContext = { + command: "\\htmlData", + attributes + }; + break; + } + + default: + throw new Error("Unrecognized html command"); + } + + if (!parser.settings.isTrusted(trustContext)) { + return parser.formatUnsupportedCmd(funcName); + } + + return { + type: "html", + mode: parser.mode, + attributes, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options, false); + var classes = ["enclosing"]; + + if (group.attributes.class) { + classes.push(...group.attributes.class.trim().split(/\s+/)); + } + + var span = buildCommon.makeSpan(classes, elements, options); + + for (var attr in group.attributes) { + if (attr !== "class" && group.attributes.hasOwnProperty(attr)) { + span.setAttribute(attr, group.attributes[attr]); + } + } + + return span; + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.body, options); + } +}); + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.mathml, options); + } +}); + +var sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: (group, options) => { + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + } + + var width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + var style = { + height: makeEm(height + depth) + }; + + if (width > 0) { + style.width = makeEm(width); + } + + if (depth > 0) { + style.verticalAlign = makeEm(-depth); + } + + var node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + node.setAttribute("valign", makeEm(-depth)); + } + + node.setAttribute("height", makeEm(height + depth)); + + if (group.width.number > 0) { + var width = calculateSize(group.width, options); + node.setAttribute("width", makeEm(width)); + } + + node.setAttribute("src", group.src); + return node; + } +}); + +// Horizontal spacing commands + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + primitive: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + + htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + + mathmlBuilder(group, options) { + var dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } + +}); + +// Horizontal overlap functions +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body + }; + }, + htmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + // This code resolved issue #1153 + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = makeEm(node.height + node.depth); + + if (node.depth) { + strut.style.verticalAlign = makeEm(-node.depth); + } + + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + // This code resolves issue #1234 + + node = buildCommon.makeSpan(["thinbox"], [node], options); + return buildCommon.makeSpan(["mord", "vbox"], [node], options); + }, + mathmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(_ref, args) { + var { + funcName, + parser + } = _ref; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body + }; + } + +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(context, args) { + throw new ParseError("Mismatched " + context.funcName); + } + +}); + +var chooseMathStyle = (group, options) => { + switch (options.style.size) { + case Style$1.DISPLAY.size: + return group.display; + + case Style$1.TEXT.size: + return group.text; + + case Style$1.SCRIPT.size: + return group.script; + + case Style$1.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4, + primitive: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + var elements = buildExpression$1(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); + +var assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { + base = buildCommon.makeSpan([], [base]); + var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: makeEm(-slant) + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: makeEm(slant) + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + var parts = [finalGroup]; + + if (sub && slant !== 0 && !subIsSingleCharacter) { + // A negative margin-left was applied to the lower limit. + // Avoid an overlap by placing a spacer on the left on the group. + var spacer = buildCommon.makeSpan(["mspace"], [], options); + spacer.style.marginRight = makeEm(slant); + parts.unshift(spacer); + } + + return buildCommon.makeSpan(["mop", "op-limits"], parts, options); +}; + +// Limits, symbols +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var htmlBuilder$2 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.slice(1); + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildExpression$1(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = makeEm(baseShift); + } + + return base; + } +}; + +var mathmlBuilder$1 = (group, options) => { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mrow", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22c0": "\\bigwedge", + "\u22c1": "\\bigvee", + "\u22c2": "\\bigcap", + "\u22c3": "\\bigcup", + "\u2a00": "\\bigodot", + "\u2a01": "\\bigoplus", + "\u2a02": "\\bigotimes", + "\u2a04": "\\biguplus", + "\u2a06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], + props: { + numArgs: 0 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1, + primitive: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + + handler(_ref3) { + var { + parser, + funcName + } = _ref3; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + + handler(_ref4) { + var { + parser, + funcName + } = _ref4; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], + props: { + numArgs: 0 + }, + + handler(_ref5) { + var { + parser, + funcName + } = _ref5; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$1 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +// affect super/subscripting. +var htmlBuilder$1 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + + if (grp.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = grp.sup; + subGroup = grp.sub; + group = assertNodeType(grp.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(child => { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildExpression$1(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var mathmlBuilder = (group, options) => { + // The steps taken here are similar to the html version. + var expression = buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(node => node.toText()).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mrow", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname@", "\\operatornamewithlimits"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatornamewithlimits", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: htmlBuilder$1, + mathmlBuilder +}); +defineMacro("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"); + +defineFunctionBuilders({ + type: "ordgroup", + + htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression$1(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression$1(group.body, options, true), options); + }, + + mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } + +}); + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body + }; + }, + + htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } + +}); + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + var { + parser + } = _ref; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + var elements = buildExpression$1(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref2, args) => { + var { + parser + } = _ref2; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref3, args) => { + var { + parser + } = _ref3; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + var inner = buildCommon.makeSpan(["inner"], [buildGroup$1(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: (group, options) => { + var inner = buildExpression(ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } + +}); + +defineFunction({ + type: "internal", + names: ["\\relax"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref) { + var { + parser + } = _ref; + return { + type: "internal", + mode: parser.mode + }; + } + +}); + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + + htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = makeEm(width); + rule.style.borderTopWidth = makeEm(height); + rule.style.bottom = makeEm(shift); // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + + mathmlBuilder(group, options) { + var width = calculateSize(group.width, options); + var height = calculateSize(group.height, options); + var shift = group.shift ? calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", makeEm(width)); + rule.setAttribute("height", makeEm(height)); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", makeEm(shift)); + } else { + wrapper.setAttribute("height", makeEm(shift)); + wrapper.setAttribute("depth", makeEm(-shift)); + } + + wrapper.setAttribute("voffset", makeEm(shift)); + return wrapper; + } + +}); + +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression$1(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var htmlBuilder = (group, options) => { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref, args) => { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body + }; + }, + htmlBuilder, + mathmlBuilder: (group, options) => { + var newOptions = options.havingSize(group.size); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", makeEm(newOptions.sizeMultiplier)); + return node; + } +}); + +// smash, with optional [tb], as in AMS +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: (_ref, args, optArgs) => { + var { + parser + } = _ref; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body, + smashHeight, + smashDepth + }; + }, + htmlBuilder: (group, options) => { + var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: (group, options) => { + var node = new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + var { + parser + } = _ref; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body, + index + }; + }, + + htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildGroup$1(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < Style$1.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var { + span: img, + ruleWidth, + advanceWidth + } = delimiter.sqrtImage(minDelimiterHeight, options); + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT); + var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + + mathmlBuilder(group, options) { + var { + body, + index + } = group; + return index ? new mathMLTree.MathNode("mroot", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup(body, options)]); + } + +}); + +var styleMap = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true, + primitive: true + }, + + handler(_ref, args) { + var { + breakOnTokenText, + funcName, + parser + } = _ref; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style, + body + }; + }, + + htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + + mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } + +}); + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? htmlBuilder$2 : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits); + + return _delegate ? htmlBuilder$1 : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder$a : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? htmlBuilder$3 : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + + htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var { + base: valueBase, + sup: valueSup, + sub: valueSub + } = group; + var base = buildGroup$1(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup$1(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildGroup$1(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === Style$1.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier); + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = makeEm(-base.italic); + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight, + marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + + mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + + if (group.base && group.base.type === "horizBrace") { + isSup = !!group.sup; + + if (isSup === group.base.isOver) { + isBrace = true; + isOver = group.base.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === Style$1.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + return new mathMLTree.MathNode(nodeType, children); + } + +}); + +defineFunctionBuilders({ + type: "atom", + + htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } + +}); + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +// src/symbols.js. +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + + mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + var variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); +defineFunctionBuilders({ + type: "textord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + + mathmlBuilder(group, options) { + var text = makeText(group.text, group.mode, options); + var variant = getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + + htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + + mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } + +}); + +var pad = () => { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + + mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } + +}); + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = (group, options) => { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + allowedInArgument: true, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser, + funcName + } = _ref; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + + htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildExpression$1(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], inner, newOptions); + }, + + mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } + +}); + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } + +}); + +defineFunction({ + type: "vcenter", + names: ["\\vcenter"], + props: { + numArgs: 1, + argTypes: ["original"], + // In LaTeX, \vcenter can act only on a box. + allowedInText: false + }, + + handler(_ref, args) { + var { + parser + } = _ref; + return { + type: "vcenter", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + var body = buildGroup$1(group.body, options); + var axisHeight = options.fontMetrics().axisHeight; + var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight)); + return buildCommon.makeVList({ + positionType: "shift", + positionData: dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + // There is no way to do this in MathML. + // Write a class as a breadcrumb in case some post-processor wants + // to perform a vcenter adjustment. + return new mathMLTree.MathNode("mpadded", [buildGroup(group.body, options)], ["vcenter"]); + } + +}); + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + + htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + + mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } + +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); + +/** Include this to ensure that all functions are defined. */ +var functions = _functions; + +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more whitespace characters + * - matches a backslash followed by one or more letters then whitespace + * - matches a backslash followed by any BMP character + * Capturing groups: + * [1] regular whitespace + * [2] backslash followed by whitespace + * [3] anything else, which may include: + * [4] left character of \verb* + * [5] left character of \verb + * [6] backslash followed by word, excluding any trailing whitespace + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "(" + controlWordRegexString + ")" + spaceRegexString + "*"; +var controlSpaceRegexString = "\\\\(\n|[ \r\t]+\n?)[ \r\t]*"; +var combiningDiacriticalMarkString = "[\u0300-\u036f]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + ( // whitespace +controlSpaceRegexString + "|") + // \whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\4" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\5" + ( // \verb unstarred +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +class Lexer { + // Category codes. The lexer only supports comment characters (14) for now. + // MacroExpander additionally distinguishes active (13). + constructor(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14, + // comment character + "~": 13 // active character + + }; + } + + setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + + + lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[6] || match[3] || (match[2] ? "\\ " : " "); + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + } + +} + +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ +class Namespace { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + + + endGroup() { + if (this.undefStack.length === 0) { + throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] == null) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + while (this.undefStack.length > 0) { + this.endGroup(); + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + + + has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + + + get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + * A value of undefined means to delete existing definitions. + */ + + + set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + if (value == null) { + delete this.current[name]; + } else { + this.current[name] = value; + } + } + +} + +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +var macros = _macros; +// macro tools + +defineMacro("\\noexpand", function (context) { + // The expansion is the token itself; but that token is interpreted + // as if its meaning were ‘\relax’ if it is a control sequence that + // would ordinarily be expanded by TeX’s expansion rules. + var t = context.popToken(); + + if (context.isExpandable(t.text)) { + t.noexpand = true; + t.treatAsRelax = true; + } + + return { + tokens: [t], + numArgs: 0 + }; +}); +defineMacro("\\expandafter", function (context) { + // TeX first reads the token that comes immediately after \expandafter, + // without expanding it; let’s call this token t. Then TeX reads the + // token that comes after t (and possibly more tokens, if that token + // has an argument), replacing it by its expansion. Finally TeX puts + // t back in front of that expansion. + var t = context.popToken(); + context.expandOnce(true); // expand only an expandable token + + return { + tokens: [t], + numArgs: 0 + }; +}); // LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol that isn't a space, consuming any spaces but not consuming the +// first nonspace character. If that nonspace character matches #1, then +// the macro expands to #2; otherwise, it expands to #3. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + context.consumeSpaces(); + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var newcommand = (context, existsOK, nonexistsOK) => { + var arg = context.consumeArg().tokens; + + if (arg.length !== 1) { + throw new ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArg().tokens; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArg().tokens; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", context => newcommand(context, false, true)); +defineMacro("\\renewcommand", context => newcommand(context, true, false)); +defineMacro("\\providecommand", context => newcommand(context, true, true)); // terminal (console) tools + +defineMacro("\\message", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.log(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\errmessage", context => { + var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console + + console.error(arg.reverse().map(token => token.text).join("")); + return ''; +}); +defineMacro("\\show", context => { + var tok = context.popToken(); + var name = tok.text; // eslint-disable-next-line no-console + + console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]); + return ''; +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def~{\nobreakspace{}} +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("~", "\\nobreakspace"); +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \mathstrut from the TeXbook, p 360 + +defineMacro("\\mathstrut", "\\vphantom{(}"); // \underbar from TeXbook p 353 + +defineMacro("\\underbar", "\\underline{\\text{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\u00A9", "\\copyright"); +defineMacro("\u00AE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); // The KaTeX fonts have corners at codepoints that don't match Unicode. +// For MathML purposes, use the Unicode code point. + +defineMacro("\\ulcorner", "\\html@mathml{\\@ulcorner}{\\mathop{\\char\"231c}}"); +defineMacro("\\urcorner", "\\html@mathml{\\@urcorner}{\\mathop{\\char\"231d}}"); +defineMacro("\\llcorner", "\\html@mathml{\\@llcorner}{\\mathop{\\char\"231e}}"); +defineMacro("\\lrcorner", "\\html@mathml{\\@lrcorner}{\\mathop{\\char\"231f}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22ee", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.slice(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in symbols.math) { + if (utils.contains(['bin', 'rel'], symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", context => { + if (context.macros.get("\\df@tag")) { + throw new ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \expandafter\let\expandafter\@normalcr +// \csname\expandafter\@gobble\string\\ \endcsname +// \DeclareRobustCommand\newline{\@normalcr\relax} + +defineMacro("\\newline", "\\\\\\relax"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = makeEm(fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1]); +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// From amsopn.sty + +defineMacro("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"); +defineMacro("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"); +defineMacro("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"); +defineMacro("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"); +defineMacro("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"); +defineMacro("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); +defineMacro("\\imath", "\\html@mathml{\\@imath}{\u0131}"); +defineMacro("\\jmath", "\\html@mathml{\\@jmath}{\u0237}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); +defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +// The stmaryrd function `\minuso` provides a "Plimsoll" symbol that +// superimposes the characters \circ and \mathminus. Used in chemistry. + +defineMacro("\\minuso", "\\mathbin{\\html@mathml{" + "{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}" + "{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}" + "{\\char`⦵}}"); +defineMacro("⦵", "\\minuso"); ////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); ////////////////////////////////////////////////////////////////////// +// braket.sty +// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf + +defineMacro("\\bra", "\\mathinner{\\langle{#1}|}"); +defineMacro("\\ket", "\\mathinner{|{#1}\\rangle}"); +defineMacro("\\braket", "\\mathinner{\\langle{#1}\\rangle}"); +defineMacro("\\Bra", "\\left\\langle#1\\right|"); +defineMacro("\\Ket", "\\left|#1\\right\\rangle"); + +var braketHelper = one => context => { + var left = context.consumeArg().tokens; + var middle = context.consumeArg().tokens; + var middleDouble = context.consumeArg().tokens; + var right = context.consumeArg().tokens; + var oldMiddle = context.macros.get("|"); + var oldMiddleDouble = context.macros.get("\\|"); + context.macros.beginGroup(); + + var midMacro = double => context => { + if (one) { + // Only modify the first instance of | or \| + context.macros.set("|", oldMiddle); + + if (middleDouble.length) { + context.macros.set("\\|", oldMiddleDouble); + } + } + + var doubled = double; + + if (!double && middleDouble.length) { + // Mimic \@ifnextchar + var nextToken = context.future(); + + if (nextToken.text === "|") { + context.popToken(); + doubled = true; + } + } + + return { + tokens: doubled ? middleDouble : middle, + numArgs: 0 + }; + }; + + context.macros.set("|", midMacro(false)); + + if (middleDouble.length) { + context.macros.set("\\|", midMacro(true)); + } + + var arg = context.consumeArg().tokens; + var expanded = context.expandTokens([...right, ...arg, ...left // reversed + ]); + context.macros.endGroup(); + return { + tokens: expanded.reverse(), + numArgs: 0 + }; +}; + +defineMacro("\\bra@ket", braketHelper(false)); +defineMacro("\\bra@set", braketHelper(true)); +defineMacro("\\Braket", "\\bra@ket{\\left\\langle}" + "{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"); +defineMacro("\\Set", "\\bra@set{\\left\\{\\:}" + "{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"); +defineMacro("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"); // has no support for special || or \| +////////////////////////////////////////////////////////////////////// +// actuarialangle.dtx + +defineMacro("\\angln", "{\\angl n}"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); + +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; +class MacroExpander { + constructor(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + + + beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + + + endGroup() { + this.macros.endGroup(); + } + /** + * Ends all currently nested groups (if any), restoring values before the + * groups began. Useful in case of an error in the middle of parsing. + */ + + + endGroups() { + this.macros.endGroups(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + + + future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + + + popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + + + pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + + + pushTokens(tokens) { + this.stack.push(...tokens); + } + /** + * Find an macro argument without expanding tokens and append the array of + * tokens to the token stack. Uses Token as a container for the result. + */ + + + scanArgument(isOptional) { + var start; + var end; + var tokens; + + if (isOptional) { + this.consumeSpaces(); // \@ifnextchar gobbles any space following it + + if (this.future().text !== "[") { + return null; + } + + start = this.popToken(); // don't include [ in tokens + + ({ + tokens, + end + } = this.consumeArg(["]"])); + } else { + ({ + tokens, + start, + end + } = this.consumeArg()); + } // indicate the end of an argument + + + this.pushToken(new Token("EOF", end.loc)); + this.pushTokens(tokens); + return start.range(end, ""); + } + /** + * Consume all following space tokens, without expansion. + */ + + + consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume an argument from the token stream, and return the resulting array + * of tokens and start/end token. + */ + + + consumeArg(delims) { + // The argument for a delimited parameter is the shortest (possibly + // empty) sequence of tokens with properly nested {...} groups that is + // followed ... by this particular list of non-parameter tokens. + // The argument for an undelimited parameter is the next nonblank + // token, unless that token is ‘{’, when the argument will be the + // entire {...} group that follows. + var tokens = []; + var isDelimited = delims && delims.length > 0; + + if (!isDelimited) { + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + this.consumeSpaces(); + } + + var start = this.future(); + var tok; + var depth = 0; + var match = 0; + + do { + tok = this.popToken(); + tokens.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + + if (depth === -1) { + throw new ParseError("Extra }", tok); + } + } else if (tok.text === "EOF") { + throw new ParseError("Unexpected end of input in a macro argument" + ", expected '" + (delims && isDelimited ? delims[match] : "}") + "'", tok); + } + + if (delims && isDelimited) { + if ((depth === 0 || depth === 1 && delims[match] === "{") && tok.text === delims[match]) { + ++match; + + if (match === delims.length) { + // don't include delims in tokens + tokens.splice(-match, match); + break; + } + } else { + match = 0; + } + } + } while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{}’, + // ... the outermost braces enclosing the argument are removed + + + if (start.text === "{" && tokens[tokens.length - 1].text === "}") { + tokens.pop(); + tokens.shift(); + } + + tokens.reverse(); // to fit in with stack order + + return { + tokens, + start, + end: tok + }; + } + /** + * Consume the specified number of (delimited) arguments from the token + * stream and return the resulting array of arguments. + */ + + + consumeArgs(numArgs, delimiters) { + if (delimiters) { + if (delimiters.length !== numArgs + 1) { + throw new ParseError("The length of delimiters doesn't match the number of args!"); + } + + var delims = delimiters[0]; + + for (var i = 0; i < delims.length; i++) { + var tok = this.popToken(); + + if (delims[i] !== tok.text) { + throw new ParseError("Use of the macro doesn't match its definition", tok); + } + } + } + + var args = []; + + for (var _i = 0; _i < numArgs; _i++) { + args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens); + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order, and the number of such tokens will be + * returned. This number might be zero or positive. + * + * If not, the return value is `false`, and the next token remains at the + * top of the stack. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty (in case of empty expansion + * and no other tokens). + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * If expandableOnly, only expandable tokens are expanded and + * an undefined control sequence results in an error. + */ + + + expandOnce(expandableOnly) { + var topToken = this.popToken(); + var name = topToken.text; + var expansion = !topToken.noexpand ? this._getExpansion(name) : null; + + if (expansion == null || expandableOnly && expansion.unexpandable) { + if (expandableOnly && expansion == null && name[0] === "\\" && !this.isDefined(name)) { + throw new ParseError("Undefined control sequence: " + name); + } + + this.pushToken(topToken); + return false; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + var tokens = expansion.tokens; + var args = this.consumeArgs(expansion.numArgs, expansion.delimiters); + + if (expansion.numArgs) { + // paste arguments in place of the placeholders + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + // replace the placeholder with the indicated argument + tokens.splice(i, 2, ...args[+tok.text - 1]); + } else { + throw new ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens.length; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + + + expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + + + expandNextToken() { + for (;;) { + if (this.expandOnce() === false) { + // fully expanded + var token = this.stack.pop(); // the token after \noexpand is interpreted as if its meaning + // were ‘\relax’ + + if (token.treatAsRelax) { + token.text = "\\relax"; + } + + return token; + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + + + expandMacro(name) { + return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined; + } + /** + * Fully expand the given token stream and return the resulting list of + * tokens. Note that the input tokens are in reverse order, but the + * output tokens are in forward order. + */ + + + expandTokens(tokens) { + var output = []; + var oldStackLength = this.stack.length; + this.pushTokens(tokens); + + while (this.stack.length > oldStackLength) { + // Expand only expandable tokens + if (this.expandOnce(true) === false) { + // fully expanded + var token = this.stack.pop(); + + if (token.treatAsRelax) { + // the expansion of \noexpand is the token itself + token.noexpand = false; + token.treatAsRelax = false; + } + + output.push(token); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + + + expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(token => token.text).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + + + _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } // If a single character has an associated catcode other than 13 + // (active character), then don't expand it. + + + if (name.length === 1) { + var catcode = this.lexer.catcodes[name]; + + if (catcode != null && catcode !== 13) { + return; + } + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens, + numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + + + isDefined(name) { + return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + /** + * Determine whether a command is expandable. + */ + + + isExpandable(name) { + var macro = this.macros.get(name); + return macro != null ? typeof macro === "string" || typeof macro === "function" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive; + } + +} + +// Helpers for Parser.js handling of Unicode (sub|super)script characters. +var unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/; +var uSubsAndSups = Object.freeze({ + '₊': '+', + '₋': '-', + '₌': '=', + '₍': '(', + '₎': ')', + '₀': '0', + '₁': '1', + '₂': '2', + '₃': '3', + '₄': '4', + '₅': '5', + '₆': '6', + '₇': '7', + '₈': '8', + '₉': '9', + '\u2090': 'a', + '\u2091': 'e', + '\u2095': 'h', + '\u1D62': 'i', + '\u2C7C': 'j', + '\u2096': 'k', + '\u2097': 'l', + '\u2098': 'm', + '\u2099': 'n', + '\u2092': 'o', + '\u209A': 'p', + '\u1D63': 'r', + '\u209B': 's', + '\u209C': 't', + '\u1D64': 'u', + '\u1D65': 'v', + '\u2093': 'x', + '\u1D66': 'β', + '\u1D67': 'γ', + '\u1D68': 'ρ', + '\u1D69': '\u03d5', + '\u1D6A': 'χ', + '⁺': '+', + '⁻': '-', + '⁼': '=', + '⁽': '(', + '⁾': ')', + '⁰': '0', + '¹': '1', + '²': '2', + '³': '3', + '⁴': '4', + '⁵': '5', + '⁶': '6', + '⁷': '7', + '⁸': '8', + '⁹': '9', + '\u1D2C': 'A', + '\u1D2E': 'B', + '\u1D30': 'D', + '\u1D31': 'E', + '\u1D33': 'G', + '\u1D34': 'H', + '\u1D35': 'I', + '\u1D36': 'J', + '\u1D37': 'K', + '\u1D38': 'L', + '\u1D39': 'M', + '\u1D3A': 'N', + '\u1D3C': 'O', + '\u1D3E': 'P', + '\u1D3F': 'R', + '\u1D40': 'T', + '\u1D41': 'U', + '\u2C7D': 'V', + '\u1D42': 'W', + '\u1D43': 'a', + '\u1D47': 'b', + '\u1D9C': 'c', + '\u1D48': 'd', + '\u1D49': 'e', + '\u1DA0': 'f', + '\u1D4D': 'g', + '\u02B0': 'h', + '\u2071': 'i', + '\u02B2': 'j', + '\u1D4F': 'k', + '\u02E1': 'l', + '\u1D50': 'm', + '\u207F': 'n', + '\u1D52': 'o', + '\u1D56': 'p', + '\u02B3': 'r', + '\u02E2': 's', + '\u1D57': 't', + '\u1D58': 'u', + '\u1D5B': 'v', + '\u02B7': 'w', + '\u02E3': 'x', + '\u02B8': 'y', + '\u1DBB': 'z', + '\u1D5D': 'β', + '\u1D5E': 'γ', + '\u1D5F': 'δ', + '\u1D60': '\u03d5', + '\u1D61': 'χ', + '\u1DBF': 'θ' +}); + +/* eslint no-constant-condition:0 */ + +var unicodeAccents = { + "́": { + "text": "\\'", + "math": "\\acute" + }, + "̀": { + "text": "\\`", + "math": "\\grave" + }, + "̈": { + "text": "\\\"", + "math": "\\ddot" + }, + "̃": { + "text": "\\~", + "math": "\\tilde" + }, + "̄": { + "text": "\\=", + "math": "\\bar" + }, + "̆": { + "text": "\\u", + "math": "\\breve" + }, + "̌": { + "text": "\\v", + "math": "\\check" + }, + "̂": { + "text": "\\^", + "math": "\\hat" + }, + "̇": { + "text": "\\.", + "math": "\\dot" + }, + "̊": { + "text": "\\r", + "math": "\\mathring" + }, + "̋": { + "text": "\\H" + }, + "̧": { + "text": "\\c" + } +}; +var unicodeSymbols = { + "á": "á", + "à": "à", + "ä": "ä", + "ǟ": "ǟ", + "ã": "ã", + "ā": "ā", + "ă": "ă", + "ắ": "ắ", + "ằ": "ằ", + "ẵ": "ẵ", + "ǎ": "ǎ", + "â": "â", + "ấ": "ấ", + "ầ": "ầ", + "ẫ": "ẫ", + "ȧ": "ȧ", + "ǡ": "ǡ", + "å": "å", + "ǻ": "ǻ", + "ḃ": "ḃ", + "ć": "ć", + "ḉ": "ḉ", + "č": "č", + "ĉ": "ĉ", + "ċ": "ċ", + "ç": "ç", + "ď": "ď", + "ḋ": "ḋ", + "ḑ": "ḑ", + "é": "é", + "è": "è", + "ë": "ë", + "ẽ": "ẽ", + "ē": "ē", + "ḗ": "ḗ", + "ḕ": "ḕ", + "ĕ": "ĕ", + "ḝ": "ḝ", + "ě": "ě", + "ê": "ê", + "ế": "ế", + "ề": "ề", + "ễ": "ễ", + "ė": "ė", + "ȩ": "ȩ", + "ḟ": "ḟ", + "ǵ": "ǵ", + "ḡ": "ḡ", + "ğ": "ğ", + "ǧ": "ǧ", + "ĝ": "ĝ", + "ġ": "ġ", + "ģ": "ģ", + "ḧ": "ḧ", + "ȟ": "ȟ", + "ĥ": "ĥ", + "ḣ": "ḣ", + "ḩ": "ḩ", + "í": "í", + "ì": "ì", + "ï": "ï", + "ḯ": "ḯ", + "ĩ": "ĩ", + "ī": "ī", + "ĭ": "ĭ", + "ǐ": "ǐ", + "î": "î", + "ǰ": "ǰ", + "ĵ": "ĵ", + "ḱ": "ḱ", + "ǩ": "ǩ", + "ķ": "ķ", + "ĺ": "ĺ", + "ľ": "ľ", + "ļ": "ļ", + "ḿ": "ḿ", + "ṁ": "ṁ", + "ń": "ń", + "ǹ": "ǹ", + "ñ": "ñ", + "ň": "ň", + "ṅ": "ṅ", + "ņ": "ņ", + "ó": "ó", + "ò": "ò", + "ö": "ö", + "ȫ": "ȫ", + "õ": "õ", + "ṍ": "ṍ", + "ṏ": "ṏ", + "ȭ": "ȭ", + "ō": "ō", + "ṓ": "ṓ", + "ṑ": "ṑ", + "ŏ": "ŏ", + "ǒ": "ǒ", + "ô": "ô", + "ố": "ố", + "ồ": "ồ", + "ỗ": "ỗ", + "ȯ": "ȯ", + "ȱ": "ȱ", + "ő": "ő", + "ṕ": "ṕ", + "ṗ": "ṗ", + "ŕ": "ŕ", + "ř": "ř", + "ṙ": "ṙ", + "ŗ": "ŗ", + "ś": "ś", + "ṥ": "ṥ", + "š": "š", + "ṧ": "ṧ", + "ŝ": "ŝ", + "ṡ": "ṡ", + "ş": "ş", + "ẗ": "ẗ", + "ť": "ť", + "ṫ": "ṫ", + "ţ": "ţ", + "ú": "ú", + "ù": "ù", + "ü": "ü", + "ǘ": "ǘ", + "ǜ": "ǜ", + "ǖ": "ǖ", + "ǚ": "ǚ", + "ũ": "ũ", + "ṹ": "ṹ", + "ū": "ū", + "ṻ": "ṻ", + "ŭ": "ŭ", + "ǔ": "ǔ", + "û": "û", + "ů": "ů", + "ű": "ű", + "ṽ": "ṽ", + "ẃ": "ẃ", + "ẁ": "ẁ", + "ẅ": "ẅ", + "ŵ": "ŵ", + "ẇ": "ẇ", + "ẘ": "ẘ", + "ẍ": "ẍ", + "ẋ": "ẋ", + "ý": "ý", + "ỳ": "ỳ", + "ÿ": "ÿ", + "ỹ": "ỹ", + "ȳ": "ȳ", + "ŷ": "ŷ", + "ẏ": "ẏ", + "ẙ": "ẙ", + "ź": "ź", + "ž": "ž", + "ẑ": "ẑ", + "ż": "ż", + "Á": "Á", + "À": "À", + "Ä": "Ä", + "Ǟ": "Ǟ", + "Ã": "Ã", + "Ā": "Ā", + "Ă": "Ă", + "Ắ": "Ắ", + "Ằ": "Ằ", + "Ẵ": "Ẵ", + "Ǎ": "Ǎ", + "Â": "Â", + "Ấ": "Ấ", + "Ầ": "Ầ", + "Ẫ": "Ẫ", + "Ȧ": "Ȧ", + "Ǡ": "Ǡ", + "Å": "Å", + "Ǻ": "Ǻ", + "Ḃ": "Ḃ", + "Ć": "Ć", + "Ḉ": "Ḉ", + "Č": "Č", + "Ĉ": "Ĉ", + "Ċ": "Ċ", + "Ç": "Ç", + "Ď": "Ď", + "Ḋ": "Ḋ", + "Ḑ": "Ḑ", + "É": "É", + "È": "È", + "Ë": "Ë", + "Ẽ": "Ẽ", + "Ē": "Ē", + "Ḗ": "Ḗ", + "Ḕ": "Ḕ", + "Ĕ": "Ĕ", + "Ḝ": "Ḝ", + "Ě": "Ě", + "Ê": "Ê", + "Ế": "Ế", + "Ề": "Ề", + "Ễ": "Ễ", + "Ė": "Ė", + "Ȩ": "Ȩ", + "Ḟ": "Ḟ", + "Ǵ": "Ǵ", + "Ḡ": "Ḡ", + "Ğ": "Ğ", + "Ǧ": "Ǧ", + "Ĝ": "Ĝ", + "Ġ": "Ġ", + "Ģ": "Ģ", + "Ḧ": "Ḧ", + "Ȟ": "Ȟ", + "Ĥ": "Ĥ", + "Ḣ": "Ḣ", + "Ḩ": "Ḩ", + "Í": "Í", + "Ì": "Ì", + "Ï": "Ï", + "Ḯ": "Ḯ", + "Ĩ": "Ĩ", + "Ī": "Ī", + "Ĭ": "Ĭ", + "Ǐ": "Ǐ", + "Î": "Î", + "İ": "İ", + "Ĵ": "Ĵ", + "Ḱ": "Ḱ", + "Ǩ": "Ǩ", + "Ķ": "Ķ", + "Ĺ": "Ĺ", + "Ľ": "Ľ", + "Ļ": "Ļ", + "Ḿ": "Ḿ", + "Ṁ": "Ṁ", + "Ń": "Ń", + "Ǹ": "Ǹ", + "Ñ": "Ñ", + "Ň": "Ň", + "Ṅ": "Ṅ", + "Ņ": "Ņ", + "Ó": "Ó", + "Ò": "Ò", + "Ö": "Ö", + "Ȫ": "Ȫ", + "Õ": "Õ", + "Ṍ": "Ṍ", + "Ṏ": "Ṏ", + "Ȭ": "Ȭ", + "Ō": "Ō", + "Ṓ": "Ṓ", + "Ṑ": "Ṑ", + "Ŏ": "Ŏ", + "Ǒ": "Ǒ", + "Ô": "Ô", + "Ố": "Ố", + "Ồ": "Ồ", + "Ỗ": "Ỗ", + "Ȯ": "Ȯ", + "Ȱ": "Ȱ", + "Ő": "Ő", + "Ṕ": "Ṕ", + "Ṗ": "Ṗ", + "Ŕ": "Ŕ", + "Ř": "Ř", + "Ṙ": "Ṙ", + "Ŗ": "Ŗ", + "Ś": "Ś", + "Ṥ": "Ṥ", + "Š": "Š", + "Ṧ": "Ṧ", + "Ŝ": "Ŝ", + "Ṡ": "Ṡ", + "Ş": "Ş", + "Ť": "Ť", + "Ṫ": "Ṫ", + "Ţ": "Ţ", + "Ú": "Ú", + "Ù": "Ù", + "Ü": "Ü", + "Ǘ": "Ǘ", + "Ǜ": "Ǜ", + "Ǖ": "Ǖ", + "Ǚ": "Ǚ", + "Ũ": "Ũ", + "Ṹ": "Ṹ", + "Ū": "Ū", + "Ṻ": "Ṻ", + "Ŭ": "Ŭ", + "Ǔ": "Ǔ", + "Û": "Û", + "Ů": "Ů", + "Ű": "Ű", + "Ṽ": "Ṽ", + "Ẃ": "Ẃ", + "Ẁ": "Ẁ", + "Ẅ": "Ẅ", + "Ŵ": "Ŵ", + "Ẇ": "Ẇ", + "Ẍ": "Ẍ", + "Ẋ": "Ẋ", + "Ý": "Ý", + "Ỳ": "Ỳ", + "Ÿ": "Ÿ", + "Ỹ": "Ỹ", + "Ȳ": "Ȳ", + "Ŷ": "Ŷ", + "Ẏ": "Ẏ", + "Ź": "Ź", + "Ž": "Ž", + "Ẑ": "Ẑ", + "Ż": "Ż", + "ά": "ά", + "ὰ": "ὰ", + "ᾱ": "ᾱ", + "ᾰ": "ᾰ", + "έ": "έ", + "ὲ": "ὲ", + "ή": "ή", + "ὴ": "ὴ", + "ί": "ί", + "ὶ": "ὶ", + "ϊ": "ϊ", + "ΐ": "ΐ", + "ῒ": "ῒ", + "ῑ": "ῑ", + "ῐ": "ῐ", + "ό": "ό", + "ὸ": "ὸ", + "ύ": "ύ", + "ὺ": "ὺ", + "ϋ": "ϋ", + "ΰ": "ΰ", + "ῢ": "ῢ", + "ῡ": "ῡ", + "ῠ": "ῠ", + "ώ": "ώ", + "ὼ": "ὼ", + "Ύ": "Ύ", + "Ὺ": "Ὺ", + "Ϋ": "Ϋ", + "Ῡ": "Ῡ", + "Ῠ": "Ῠ", + "Ώ": "Ώ", + "Ὼ": "Ὼ" +}; + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +class Parser { + constructor(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + + + consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + + + fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + + + parse() { + if (!this.settings.globalGroup) { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); + } // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } + + try { + // Try to parse the input + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + if (!this.settings.globalGroup) { + this.gullet.endGroup(); + } + + return parse; // Close any leftover groups in case of a parse error. + } finally { + this.gullet.endGroups(); + } + } + /** + * Fully parse a separate sequence of tokens as a separate job. + * Tokens should be specified in reverse order, as in a MacroDefinition. + */ + + + subparse(tokens) { + // Save the next token from the current job. + var oldToken = this.nextToken; + this.consume(); // Run the new job, terminating it with an excess '}' + + this.gullet.pushToken(new Token("}")); + this.gullet.pushTokens(tokens); + var parse = this.parseExpression(false); + this.expect("}"); // Restore the next token from the current job. + + this.nextToken = oldToken; + return parse; + } + + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precedence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } else if (atom.type === "internal") { + continue; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + + + handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + if (body[i].type === "infix") { + if (overIndex !== -1) { + throw new ParseError("only one infix operator per group", body[i].token); + } + + overIndex = i; + funcName = body[i].replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } + /** + * Handle a subscript or superscript with nice errors. + */ + + + handleSupSubscript(name // For error reporting. + ) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + + var group = this.parseGroup(name); + + if (!group) { + throw new ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + + + formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + + + parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (base && base.type === "op") { + var limits = lex.text === "\\limits"; + base.limits = limits; + base.alwaysHandleSupSub = true; + } else if (base && base.type === "operatorname") { + if (base.alwaysHandleSupSub) { + base.limits = lex.text === "\\limits"; + } + } else { + throw new ParseError("Limit controls must follow a math operator", lex); + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else if (uSubsAndSups[lex.text]) { + // A Unicode subscript or superscript character. + // We treat these similarly to the unicode-math package. + // So we render a string of Unicode (sub|super)scripts the + // same as a (sub|super)script of regular characters. + var str = uSubsAndSups[lex.text]; + var isSub = unicodeSubRegEx.test(lex.text); + this.consume(); // Continue fetching tokens to fill out the string. + + while (true) { + var token = this.fetch().text; + + if (!uSubsAndSups[token]) { + break; + } + + if (unicodeSubRegEx.test(token) !== isSub) { + break; + } + + this.consume(); + str += uSubsAndSups[token]; + } // Now create a (sub|super)script. + + + var body = new Parser(str, this.settings).parse(); + + if (isSub) { + subscript = { + type: "ordgroup", + mode: "math", + body + }; + } else { + superscript = { + type: "ordgroup", + mode: "math", + body + }; + } + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + + + parseFunction(breakOnTokenText, name // For determining its context + ) { + var token = this.fetch(); + var func = token.text; + var funcData = functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (name && name !== "atom" && !funcData.allowedInArgument) { + throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new ParseError("Can't use function '" + func + "' in math mode", token); + } + + var { + args, + optArgs + } = this.parseArguments(func, funcData); + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + + + callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token, + breakOnTokenText + }; + var func = functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + + + parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + + if (funcData.primitive && argType == null || // \sqrt expands into primitive if optional argument doesn't exist + funcData.type === "sqrt" && i === 1 && optArgs[0] == null) { + argType = "primitive"; + } + + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional); + + if (isOptional) { + optArgs.push(arg); + } else if (arg != null) { + args.push(arg); + } else { + // should be unreachable + throw new ParseError("Null argument, please report this as a bug"); + } + } + + return { + args, + optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + + + parseGroupOfType(name, type, optional) { + switch (type) { + case "color": + return this.parseColorGroup(optional); + + case "size": + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional); + + case "math": + case "text": + return this.parseArgumentGroup(optional, type); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseArgumentGroup(optional, "text"); + return group != null ? { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + } : null; + } + + case "raw": + { + var token = this.parseStringGroup("raw", optional); + return token != null ? { + type: "raw", + mode: "text", + string: token.text + } : null; + } + + case "primitive": + { + if (optional) { + throw new ParseError("A primitive argument cannot be optional"); + } + + var _group = this.parseGroup(name); + + if (_group == null) { + throw new ParseError("Expected group as " + name, this.fetch()); + } + + return _group; + } + + case "original": + case null: + case undefined: + return this.parseArgumentGroup(optional); + + default: + throw new ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + + + consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + + + parseStringGroup(modeName, // Used to describe the mode in error messages. + optional) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF") { + str += nextToken.text; + this.consume(); + } + + this.consume(); // consume the end of the argument + + argToken.text = str; + return argToken; + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + + + parseRegexGroup(regex, modeName // Used to describe the mode in error messages. + ) { + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + + + parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (res == null) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + + + parseSizeGroup(optional) { + var res; + var isBlank = false; // don't expand before parseStringGroup + + this.gullet.consumeSpaces(); + + if (!optional && this.gullet.future().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + + + parseUrlGroup(optional) { + this.gullet.lexer.setCatcode("%", 13); // active character + + this.gullet.lexer.setCatcode("~", 12); // other character + + var res = this.parseStringGroup("url", optional); + this.gullet.lexer.setCatcode("%", 14); // comment character + + this.gullet.lexer.setCatcode("~", 13); // active character + + if (res == null) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url + }; + } + /** + * Parses an argument with the mode specified. + */ + + + parseArgumentGroup(optional, mode) { + var argToken = this.gullet.scanArgument(optional); + + if (argToken == null) { + return null; + } + + var outerMode = this.mode; + + if (mode) { + // Switch to specified mode + this.switchMode(mode); + } + + this.gullet.beginGroup(); + var expression = this.parseExpression(false, "EOF"); // TODO: find an alternative way to denote the end + + this.expect("EOF"); // expect the end of the argument + + this.gullet.endGroup(); + var result = { + type: "ordgroup", + mode: this.mode, + loc: argToken.loc, + body: expression + }; + + if (mode) { + // Switch mode back + this.switchMode(outerMode); + } + + return result; + } + /** + * Parses an ordinary group, which is either a single nucleus (like "x") + * or an expression in braces (like "{x+y}") or an implicit group, a group + * that starts at the current position, and ends right before a higher explicit + * group ends, or at EOF. + */ + + + parseGroup(name, // For error reporting. + breakOnTokenText) { + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = text === "{" ? "}" : "\\endgroup"; + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); + this.expect(groupEnd); // Check that we got a matching closing brace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + + + formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + + + parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.slice(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = '\u0131'; // dotless i, in math and text mode + } else if (text === 'j') { + text = '\u0237'; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family, + loc, + text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc, + text + }; + } // $FlowFixMe + + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text; + + if (!command) { + throw new ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + // $FlowFixMe + base: symbol + }; + } + } // $FlowFixMe + + + return symbol; + } + +} +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; + +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render(). + + delete parser.gullet.macros.current["\\current@color"]; + delete parser.gullet.macros.current["\\color"]; // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new ParseError("\\tag works only in display equations"); + } + + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.subparse([new Token("\\df@tag")]) + }]; + } + + return tree; +}; + +/* eslint no-console:0 */ + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings(options); + return parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings(options); + + try { + var tree = parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +var katex = { + /** + * Current KaTeX version + */ + version: "0.16.8", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError, + + /** + * The shema of Settings + */ + SETTINGS_SCHEMA, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new function to builtin function list, + * which directly produce parse tree elements + * and have their own html/mathml builders + */ + __defineFunction: defineFunction, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span, + Anchor, + SymbolNode, + SvgNode, + PathNode, + LineNode + } +}; + +export { katex as default }; diff --git a/library-plans/index.html b/library-plans/index.html new file mode 100644 index 0000000..eafab2d --- /dev/null +++ b/library-plans/index.html @@ -0,0 +1,377 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project Elara library plans

+ +

All libraries

+
    +
  • Implement custom error types (this is already being implemented in elara-gfx pretty well) following https://mmapped.blog/posts/12-rust-error-handling.html - the correct approach is small enums of error categories rather than one humongous global error enum
  • +
  • Move to Codeberg for hosting in the future and keep github as mirrors
  • +
  • All libraries that currently depend on elara-log should be able to make elara-log an optional dependency behind the logging feature flag. If disabled, they will simply use println! instead.
  • +
+

elara-astro

+

https://crates.io/crates/nyx-space

+

elara-md

+

elaramd is a self-contained markdown to PDF converter for project elara. This converter skips the HTML generation step and directly takes markdown (with embedded LaTeX equations) and converts it to a styled PDF in the Elara Project style. This converter should include some common themes - academic (research paper), article, technical, etc. so that future project elara papers can be written in pure markdown instead of needing to be written in LaTeX.

+

elara-presenter

+

Ideal presentation tool for project elara - takahashi method, write slides in markdown, the tool allows presenting the slides, like sent from suckless or https://ia.net/presenter. The tool should include markup for:

+
    +
  • Text slides +
      +
    • Heading-only slides
    • +
    • Text-only slides
    • +
    • Label and text slide (image is 100% height and text takes up remaining room)
    • +
    +
  • +
  • Whole page images
  • +
  • Code slides
  • +
  • KaTeX math slides
  • +
  • Good design for the slide themes
  • +
+

elara-ui

+

Elara UI offers three different APIs:

+
    +
  • The widget API provides ready-to-use, styled widgets following Elara design conventions. However, widgets are not customizable
  • +
  • The component API provides basic building blocks of UIs that can then be joined together. They are flexible while not being overly verbose.
  • +
  • The draw API allows painting custom widgets. It is the lowest-level API.
  • +
+

Elara UI requirements:

+
    +
  • Implementation of the entire Elara UI design system
  • +
  • Good performance, low footprint (but it does not have to be aggressively optimized)
  • +
  • Simple to use and easy to maintain
  • +
  • Battle-tested: to prove this, several apps meant for production use will be written in Elara UI to test its functionality (see the demo apps below)
  • +
+

The single biggest inspiration for Elara UI's API is Gtk.

+

For Elara UI apps, the primary architecture will be a core-frontend approach. The functionality of the app will reside in the core, essentially library that contains all app functions. This allows the app to be run from the terminal, as well as controlled by scripting. The core should be able to do everything the app needs to do. Meanwhile, the frontend will communicate with the core and present the interface that the user will use to control the app. However, the frontend has no functionality of its own; all the functionality is in the core, which the frontend merely provides an interface to.

+

To integrate with this architecture, Elara UI is a retained-mode UI library, and uses the simplest API imaginable:

+
// 1. Create UI
+let mut ui = UI::new(1600, 1200);
+
+// 2. Create layouts
+let mut left_sidebar = Layout::default();
+
+// 3. Add elements with widgets API (easier) or 
+// components API (more control) to layout
+let mut sidebar_label = Label::new("Sidebar");
+let mut sidebar_list = List::from("Item {}", 0..5);
+
+// 4. Add callbacks to widgets to make them interactive
+// widgets can be bound to a state so that their appearance
+// is linked to that state
+sidebar_list.on(move |event| {
+    match event {
+        Event::Click => {
+            ui.close();
+        },
+        _ => (),
+    }
+})
+
+// 5. Add components to layout, and add layout to UI
+left_sidebar.add_element(sidebar_label);
+left_sidebar.add_element(sidebar_list);
+ui.add_element(left_sidebar);
+
+

Testing demo apps:

+ +

Follow tips from https://2d.graphics/

+

Tips for fast GPU rendering:

+
    +
  • Only render on user input/interaction, otherwise don't re-render frames (no immediate-mode UI that re-renders every frame)
  • +
  • Only re-render changed areas ("damage tracking") +
      +
    • This requires caching the last render to a texture in memory and loading that texture on next frame, cropping out the region that was changed
    • +
    +
  • +
  • Must render on GPU
  • +
  • For repeated elements (e.g. long lists or tree views) caching is necessary
  • +
+

design stuff:

+

For elaraui components - implement all the components that egui has in its demo

+

Cool apps to maybe port one day to elara-ui as demo applications:

+ +

elara-math

+

Implement the following:

+
    +
  • Adam optimizer
  • +
+

Current progress: see [Elara math optimization plan]

+

Elara-math will use elara-array for implementation of n-dimensional arrays, however everything else (e.g. diff eq solvers, FFT, special functions, quadrature, etc.) is custom-implemented.

+

In the future, do a "blank rewrite" - rewriting the entire library without looking at any reference github source code. Doing this often will help improve the code quality.

+

Autodiff implementations to look at:

+ +

In the future elara-math should have a second functional API like Jax's that will be the primary API. This functional API has a elara_math::grad()function that transforms one function into a corresponding function for its derivative. Base this on how https://github.com/HIPS/autograd implements it. This is bc the current PyTorch-inspired API is basically only good for neural networks and wastes computational time creating graphs. One similar rust implementation to reference is https://github.com/ibab/rust-ad/blob/master/src/lib.rs.

+

Implement sparse matrices: https://crates.io/crates/sprs

+
    +
  • +Also add a numerical quadrature feature to elara-math to compute integrals:
  • +
  • +Implement simpson's rule and Gauss-Konrod rule based on https://github.com/esa/torchquad for 1D case, Monte-Carlo integration for N-D case, as well as Trapezoidal and Romberg quadrature for integrating over discrete arrays
  • +
  • +Add automatic integration - this is like automatic differentiation, only it takes a function and integrates its nth Taylor polynomial (which can be found exactly) - since unlike typical numerical integration it can be done to machine precision and thus doesn't suffer from numerical precision errors, it could be far more precise
  • +
+

https://crates.io/crates/quad-rs/0.1.2

+

Also learn matrix calculus for elara-math from https://www.lesswrong.com/s/nMGrhBYXWjPhZoyNL/p/9L9XuXhLYBm47yYkf

+

Also eventually create a tensor algebra system like cadabra: https://cadabra.science/

+

Also add a monte-carlo solver for ODEs: https://jotterbach.github.io/content/posts/mc_ode/2018-08-08-MonteCarloODE/

+

elara-ml

+

Note: Elara ML is responsible for implementing the higher-level constructs for efficient machine learning (e.g. dense layers, convolution layers, model architectures, pretrained models, etc.) while Elara Math handles the underlying computations.

+

See [Elara ML API proposal]

+

https://github.com/utility-code/tinyDL

+

elara-gfx

+

See [Elara GFX continuing work]

+

Fixes:

+
    +
  • +Fix the issue of the text rendering coordinates
  • +
  • +Unified coordinate system for all primitives
  • +
+

Features:

+ +

Look at https://lodev.org/lodepng/ and port the 500-line picoPNG into a Rust version for elara-gfx.

+

Implement several libraries on top of elara-gfx:

+
    +
  • elara-vg: Fabric.js/Paper.js-like vector graphics library on top of elara-gfx, see http://fabricjs.com/fabric-intro-part-1, basically it implements the vector graphics parsing and processing and vector graphics operations, but it leaves all the rendering to elara-gfx, which allows it to render to any platform elara-gfx supports (basically all the platforms)
  • +
  • elara-ui: minimal UI library on top of elara-gfx used for all the Elara apps, again thanks to the library it supports all the platforms elara-gfx supports (further details below)
  • +
+

https://zed.dev/blog/videogame

+

elara-gfx is meant to not include mathematical operations. However, for certain operations that do require handling arrays, elara-gfx will have a micro-implementation of basic math using purely functional programming. That means function signatures will look like this:

+
// Takes in matrix a of dims (M x N) and matrix b of dims (N x K)
+// and write the result to matrix c
+fn matmul(a: &[f64], b: &[f64], m: usize, n: usize, k: usize, c: &mut [f64]);
+
+

elara-gfx should have three main APIs:

+
    +
  • GfxRenderer, which is common graphics rendering layer like SDL (just with the ability to render both on the CPU and the GPU)
  • +
  • GPUCompute, which is an OpenGL wrapper for GPU computations (like CUDA)
  • +
  • Platform, a very low-level API to do things like window creation, event listening, etc.
  • +
+

Crucially elara-gfx should not implement any math functions. That is what elara-math and elara-array does.

+

The GfxRenderer layer is able to draw basically anything graphics-related:

+
    +
  • Lines
  • +
  • Primitives +
      +
    • Rectangles
    • +
    • Circles
    • +
    • Triangles
    • +
    +
  • +
  • Text
  • +
  • Images
  • +
  • Any 2D curve given a set of vertices
  • +
  • Any 2D shape given a set of vertices (which means e.g. if you want to draw a bezier curve, you need to write your algorithm to convert it to an array of vertices)
  • +
  • (Future) any 3D object given a set of vertices using shaders (the shaders are Rust closures that take in a 32-bit vertex data and fragment data array as input and output another 32-bit raster array)
  • +
+

This means that to use elara-gfx is as simple as declaring:

+
use elara_gfx::{GfxRenderer, RenderBackend};
+
+fn main() {
+    // use the cross-platform CPU backend
+    // the backend is kind of like https://zserge.com/posts/fenster/
+    let ctx = GfxRenderer::create_ctx(RenderBackend::CPU);
+    ctx.draw(...);
+
+    // use the cross-platform OpenGL backend
+    let ctx = GfxRenderer::create_ctx(RenderBackend::OpenGL);
+    ctx.draw(...);
+
+    // use the Apple-only Metal backend
+    let ctx = GfxRenderer::create_ctx(RenderBackend::Metal);
+    ctx.draw(...);
+
+    // use the cross-platform Image backend
+    // this is most suitable to rendering to an image like a PNG
+    let ctx = GfxRenderer::create_ctx(RenderBackend::Image);
+    ctx.draw(...);
+}
+
+

Elara GFX should eventually be zero-dependency (other than elara-log, but even that should be an optional feature flag), like space-shooter.c/tigr. This is a very long-term thing.

+

To implement this, I can make a simplified port of tigr to C with just the OpenGL parts, and then port it to Rust for a zero-dependency GL/platforming library. This is in line with the long-term goal of making the entire Elara Project zero-dependency.

+

elara-array

+

More details in [Elara-array API plan]

+

elara-array should include its GPU backend as an optional feature. This speeds up compile times - because if it doesn't use the GPU backend, it has basically zero dependencies.

+

Implement the following:

+
    +
  • +Working differential equations solvers
  • +
  • +Working pretty-print for NdArrays
  • +
  • +Working 1D pretty print
  • +
  • +Python bindings (referencing tinynumpy for the code)
  • +
  • +Nanoserde serialization to JSON for NumPy bridge
  • +
  • +Tests for the library
  • +
  • +Replace ndarray-rand with nanorand
  • +
+

elara-plot

+

Can plot 2D real and complex-valued functions, 3D functions, and 4D functions, as well as their field equivalents.

+

Can also plot parametric lines and parametric surfaces, as well as vector-valued functions and vector fields

+

Visualizing 4D functions $f(\mathbb{R}^3) \to \mathbb{R}^4$: assign a color to each point in 3D space (density plots), such as:

+ + + +
+
+ + + + + + + + + diff --git a/markdown-guide/index.html b/markdown-guide/index.html new file mode 100644 index 0000000..e943acb --- /dev/null +++ b/markdown-guide/index.html @@ -0,0 +1,132 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara markdown guide

+ +

The Elara Hub uses a special formatting language to generate its website. This formatting language is called Elara markdown, and is a dialect of markdown. Like markdown files, they end with the .md extension. An overview of the syntax is given below.

+

Basic syntax

+

Inline text formatting is accomplished with _italics_ (or *this italic format*) and **bold**. You can creating headings using # symbols - H2 is ##, H3 is ###, and so on. Note that on Elara Hub we don't use H1's because that is reserved for title text, and the title is auto-generated on build. Horizontal dividers are created with three dashes - that is, ---.

+ + +
+
+ + + + + + + + + diff --git a/menu/index.html b/menu/index.html new file mode 100644 index 0000000..dfe60db --- /dev/null +++ b/menu/index.html @@ -0,0 +1,193 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

You are currently on the menu page.

+ + + +
+
+ + + + + + + + + diff --git a/meta/index.html b/meta/index.html new file mode 100644 index 0000000..278734c --- /dev/null +++ b/meta/index.html @@ -0,0 +1,134 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Elara Hub Meta

+ +

It may be a good idea to make the [Elara libraries plan] a hub page with individual links to pages for each of the libraries.

+
    +
  • +Unfortunately the code blocks have a ridiculous amount of indent by default. So we have to use spaces, not tabs.
  • +
+ + +
+
+ + + + + + + + + diff --git a/multivar/index.html b/multivar/index.html new file mode 100644 index 0000000..193a1a4 --- /dev/null +++ b/multivar/index.html @@ -0,0 +1,282 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Multivariable calculus guide

+ +

Partial derivatives

+

Partial derivatives differentiate only to the given variable while holding all other variables constant. They can be noted with $\frac{\partial f}{\partial x}$ or $f_x$. The formal definition of the partial derivative in 2D is:

+

$$ +\frac{\partial f}{\partial x} = \lim_{h \to 0} \frac{f(x + h, y) - f(x, y)}{h} +$$

+

Mixed partial derivatives

+

Second partial derivatives are denoted by $\frac{\partial^2 f}{\partial x^2}$ or $f_{xx}$. When using the "del" notation (with the $\partial$ symbol) you take derivatives from right to left order; when using the subscript notation, you take derivatives from left to right order.

+

Second partial derivatives commute, which means the order you take them doesn't matter. Thus $\frac{\partial f}{\partial x \partial y} = \frac{\partial f}{\partial y \partial x}$.

+

The nabla symbol

+

The nabla symbol $\nabla$ represents a "vector" of partial derivative operators:

+

$$ +\nabla = \left\langle \frac{\partial}{\partial x}, \frac{\partial}{\partial y}, \frac{\partial}{\partial z} \right\rangle +$$

+

Scalar-valued functions

+

A scalar-valued function is a function that always outputs a number for each input, not a vector, such as $f(x, y) = 2x + 3y^2$.

+

Gradients

+

The gradient of a scalar-valued function, denoted $\nabla f$, is given by a vector containing all the partial derivatives of the function. In two dimensions, it is given by:

+

$$ +\nabla f(x, y) = \left\langle \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right\rangle +$$

+

In three dimensions, it is similarly given by:

+

$$ +\nabla f(x, y, z) = \left\langle \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right\rangle +$$

+

The gradient can be evaluated at a point $(x, y, z)$ by evaluating each of the partial derivatives at that point

+

Directional derivative

+

The directional derivative is the rate of change along a specific vector $\vec v$ and is given by:

+

$$ +\nabla_{\vec v} , f = \nabla f \cdot \vec v +$$

+

Multivariable chain rule

+

If we have a function $f(g(t))$, then:

+

$$ +\frac{df}{dt} = \frac{\partial f}{\partial x} \frac{dx}{dt} + \frac{\partial f}{\partial y} \frac{dt}{dt} = \nabla f(g(t)) \cdot g'(t) +$$

+

Parametric surfaces

+

Just as there can be surfaces formed by functions of $x$ and $y$, there can be parametric surfaces formed by functions of $s$ and $t$. They are denoted $f(s, t)$ and can be differentiated in the same way as normal surfaces, i.e. $\frac{\partial f}{\partial s}$ and $\frac{\partial f}{\partial t}$.

+

Vector-valued functions

+

Vector-valued functions produce a vector for each input, for instance:

+

$$ +\vec f(t) = +\begin{bmatrix} +t^2 + 2t \ +\sin(2t) + t +\end{bmatrix} +$$ +Note that vector-valued functions can have components that are functions of $x, y, z$, or functions of $t$, in which case its components are parametric functions.

+

The derivative of a vector-valued function is another vector in all cases. For example, velocity is often given by a vector-valued function where:

+

$$ +\vec v(t) = \begin{bmatrix} +v_x(t) \ +v_y(t) \ +v_z(t) +\end{bmatrix} = \begin{bmatrix} +x'(t) \ +y'(t) \ +z'(t) +\end{bmatrix} +$$

+

Speed is given by the norm of the velocity function:

+

$$ +v = \sqrt{v_x^2 + v_y^2 + v_z^2} +$$ +If the vector-valued function is of one variable, e.g. $\vec v(t)$, then its derivative is a regular derivative $\frac{d \vec v}{dt}$. If the vector-valued function is of several variables, e.g. $\vec v(s, t)$, then it has one partial derivative for each variable, e.g. $\frac{\partial \vec v}{\partial s}$ and $\frac{\partial \vec v}{\partial t}$.

+

The same methodology for vector-valued functions applies to vector fields.

+

Curvature

+

The curvature $\kappa$ of a vector-valued function $\vec v(t)$ is given by:

+

$$ +\kappa = \frac{|d \vec T|}{|ds|} = \frac{\vec v'(t)}{| v'(t)|} +$$ +where the double bars indicate normalizing the vector.

+

Vector fields and scalar fields

+

Fields are mathematical objects that span space and have a unique value at each point in space. Familiar examples include the electromagnetic field and gravitational field. They are written with the same notation as functions, just usually with a different symbol such as $E$, $B$, $g$ or $\phi$.

+

Scalar fields, such as temperature, assign a number to each point in space. Vector fields assign a vector to each point in space. A gradient is only defined for a scalar field - the vector-field equivalent of the gradient for vector fields is called the Jacobian, and will be covered later.

+

Divergence

+

Divergence, denoted by $\nabla \cdot \vec F$, represents the tendency of a vector field to flow out or in to a certain point:

+
    +
  • If vectors that point inwards towards a certain point are bigger than vectors that point outwards at that point, the divergence is negative and we have a sink
  • +
  • If vectors that point inwards towards a certain point are smaller than vectors that point outwards at that point, the divergence is positive and we have a source
  • +
  • If vectors that point inwards and vectors that point outwards at a certain point are equal in size, the divergence is zero
  • +
+

The divergence of a vector field $\vec F$ with components $\langle F_x, F_y, F_z\rangle$ is given by:

+

$$ +\nabla \cdot \vec F = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} +$$ +Divergence is only defined on vector fields, not on scalar fields.

+

Curl

+

Curl, denoted by $\nabla \times \vec F$, represents the tendency of a vector field to rotate around a certain point:

+
    +
  • Positive curl is a tendency of vectors to rotate counterclockwise around a point
  • +
  • Negative curl is a tendency of vectors to rotate clockwise around a point
  • +
  • Zero curl is when counterclockwise and clockwise vectors cancel out or if the vectors do not rotate around a point
  • +
+

In 2D, the curl of a vector field is given by:

+

$$ +\nabla \times \vec F = \frac{\partial F_y}{\partial x} - \frac{\partial F_x}{\partial y} +$$

+

In 3D, the curl of a vector field is the determinant of a 3 x 3 matrix:

+

$$ +\nabla \times \vec F = +\begin{vmatrix} +\hat i & \hat j & \hat k \ +\frac{\partial}{\partial x} & \frac{\partial}{\partial y} & \frac{\partial}{\partial z} \ +F_x & F_y & F_z +\end{vmatrix} +$$

+

Laplacian

+

The Laplacian, denoted by $\nabla^2 f$, is a vector field formed from the second derivatives of a scalar field. It is given by:

+

$$ +\nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} +$$

+

A function is called harmonic if it satisfies $\nabla^2 f = 0$. This is a partial differential equation called Laplace's equation.

+

Jacobian

+

The Jacobian is the analogue of the gradient for vector-valued functions. For a vector-valued function $\vec F$ with components $\langle F_x, F_y \rangle$, the Jacobian is given by:

+

$$ +J = +\begin{bmatrix} +\nabla F_x \ +\nabla F_y +\end{bmatrix} = +\begin{bmatrix} +\frac{\partial F_x}{\partial x} & \frac{\partial F_x}{\partial y} \ +\frac{\partial F_y}{\partial x} & \frac{\partial F_y}{\partial y} +\end{bmatrix} +$$ +For a vector valued function $\vec F$ of three dimensions, the Jacobian is given by:

+

$$ +J = +\begin{bmatrix} +\frac{\partial F_x}{\partial x} & \frac{\partial F_x}{\partial y} & \frac{\partial F_x}{\partial z} \ +\frac{\partial F_y}{\partial x} & \frac{\partial F_y}{\partial y} & \frac{\partial F_y}{\partial z} \ +\frac{\partial F_z}{\partial x} & \frac{\partial F_z}{\partial y} & \frac{\partial F_z}{\partial z} +\end{bmatrix} +$$ +The determinant of the Jacobian is calculated just like the determinant of any other matrix. The absolute value of the determinant of the Jacobian tells us about how areas change area around a point:

+
    +
  • If the determinant is 1, the area remains the same area
  • +
  • If the determinant is less than 1, the area contracts
  • +
  • If the determinant is greater than 1, the area expands
  • +
  • If the determinant is 0, the area contracts infinitely
  • +
+

Tangent plane

+

The tangent plane is the local linear approximation to a function at a certain point. It is often used to simplify a complicated function when the area being studied is around a certain point.

+

Tangent plane (explicit functions)

+

The tangent plane to a function $f(x, y)$ at a point $(x_0, y_0)$ is given by:

+

$$ +T(x, y) = f(x_0, y_0) + f_x (x_0, y_0) (x - x_0) + f_y (x_0, y_0) (y - y_0) +$$

+

Tangent plane (implicit functions)

+

The implicit tangent plane to a function $f(x, y, z) = 0$ at a point $(x_0, y_0, z_0)$ is given by:

+

$$ +f_x (x - x_0) + f_y(y - y_0) + f_z (z - z_0) = 0 +$$

+ + +
+
+ + + + + + + + + diff --git a/open-sans/OFL.txt b/open-sans/OFL.txt new file mode 100644 index 0000000..9b448d4 --- /dev/null +++ b/open-sans/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/open-sans/OpenSans-Bold.ttf b/open-sans/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..98c74e0a4228f2c6b06c405518e09ea9b79c43cb GIT binary patch literal 130860 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 mxZIf$E8| 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 Jdjb6K{{nvPpDq9Z literal 0 HcmV?d00001 diff --git a/open-sans/OpenSans-BoldItalic.ttf b/open-sans/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..855892833a465faca741e8c571fd5b49431989f5 GIT binary patch literal 136360 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 literal 0 HcmV?d00001 diff --git a/open-sans/OpenSans-Italic.ttf b/open-sans/OpenSans-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..29ff69386f7b74fe24f0cc85dea86771f5b7dc47 GIT binary patch literal 136604 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π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

{}108{>zpB?RT(wh7B9kpej@qbWYDvK1_V# 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 literal 0 HcmV?d00001 diff --git a/open-sans/OpenSans-MediumItalic.ttf b/open-sans/OpenSans-MediumItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6d1e09b240b04076a38937942d51b8f56f701958 GIT binary patch literal 136796 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 literal 0 HcmV?d00001 diff --git a/open-sans/README.txt b/open-sans/README.txt new file mode 100644 index 0000000..2548322 --- /dev/null +++ b/open-sans/README.txt @@ -0,0 +1,100 @@ +Open Sans Variable Font +======================= + +This download contains Open Sans as both variable fonts and static fonts. + +Open Sans is a variable font with these axes: + wdth + wght + +This means all the styles are contained in these files: + OpenSans-VariableFont_wdth,wght.ttf + OpenSans-Italic-VariableFont_wdth,wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Open Sans: + static/OpenSans_Condensed-Light.ttf + static/OpenSans_Condensed-Regular.ttf + static/OpenSans_Condensed-Medium.ttf + static/OpenSans_Condensed-SemiBold.ttf + static/OpenSans_Condensed-Bold.ttf + static/OpenSans_Condensed-ExtraBold.ttf + static/OpenSans_SemiCondensed-Light.ttf + static/OpenSans_SemiCondensed-Regular.ttf + static/OpenSans_SemiCondensed-Medium.ttf + static/OpenSans_SemiCondensed-SemiBold.ttf + static/OpenSans_SemiCondensed-Bold.ttf + static/OpenSans_SemiCondensed-ExtraBold.ttf + static/OpenSans-Light.ttf + static/OpenSans-Regular.ttf + static/OpenSans-Medium.ttf + static/OpenSans-SemiBold.ttf + static/OpenSans-Bold.ttf + static/OpenSans-ExtraBold.ttf + static/OpenSans_Condensed-LightItalic.ttf + static/OpenSans_Condensed-Italic.ttf + static/OpenSans_Condensed-MediumItalic.ttf + static/OpenSans_Condensed-SemiBoldItalic.ttf + static/OpenSans_Condensed-BoldItalic.ttf + static/OpenSans_Condensed-ExtraBoldItalic.ttf + static/OpenSans_SemiCondensed-LightItalic.ttf + static/OpenSans_SemiCondensed-Italic.ttf + static/OpenSans_SemiCondensed-MediumItalic.ttf + static/OpenSans_SemiCondensed-SemiBoldItalic.ttf + static/OpenSans_SemiCondensed-BoldItalic.ttf + static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf + static/OpenSans-LightItalic.ttf + static/OpenSans-Italic.ttf + static/OpenSans-MediumItalic.ttf + static/OpenSans-SemiBoldItalic.ttf + static/OpenSans-BoldItalic.ttf + static/OpenSans-ExtraBoldItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/open-sans/open-sans.css b/open-sans/open-sans.css new file mode 100644 index 0000000..7ca59ba --- /dev/null +++ b/open-sans/open-sans.css @@ -0,0 +1,41 @@ +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 400; + src: url("OpenSans-Regular.ttf"); +} + +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 400; + src: url("OpenSans-Italic.ttf"); +} + +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 700; + src: url("OpenSans-Bold.ttf"); +} + +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 700; + src: url("OpenSans-BoldItalic.ttf"); +} + +@font-face { + font-family: "Open Sans"; + font-style: normal; + font-weight: 500; + src: url("OpenSans-Medium.ttf"); +} + +@font-face { + font-family: "Open Sans"; + font-style: italic; + font-weight: 500; + src: url("OpenSans-MediumItalic.ttf"); +} diff --git a/outreach-plan/index.html b/outreach-plan/index.html new file mode 100644 index 0000000..cff9bc7 --- /dev/null +++ b/outreach-plan/index.html @@ -0,0 +1,143 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project Elara Outreach Plan

+ +

Fundamental issues:

+
    +
  • Must reach critical threshold of ~15-25 people to be able to start getting attention
  • +
  • Then we can present our work to a larger audience (e.g. SPS, official events, etc.) and get more people to join
  • +
  • With a bigger team we can build more advanced prototypes and have more results that we can then use to recruit more people - positive feedback loop above critical threshold
  • +
  • Also other options: + +
  • +
  • However to get to 15-25 people we must use direct outreach
  • +
+

Use DALL-E/Midjourney/Stable Diffusion to create youtube videos/website photos/poster images for Project Elara, and I'll compose the musical background music for the videos.

+ + +
+
+ + + + + + + + + diff --git a/project-philosophy/index.html b/project-philosophy/index.html new file mode 100644 index 0000000..5d8e9f8 --- /dev/null +++ b/project-philosophy/index.html @@ -0,0 +1,132 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project Philosophy

+ +

Project Elara is founded on a few key ideas. First, we have a fervent desire to make the world better - and not just a little bit better, we want to make a world that we could only dream of today, a world as close to the ideal as possible. But of course, we know that for a small group of people, accomplishing such lofty goals isn't going to be easy. So we follow a cathedral-style workflow: what can't be finished in one generation will be carried on by the next generation, and then the next, until one day, the work is finished.

+

Second, we want to stay true to the project's ideals far into the future. This entails that the hands to steer the project must always be our own. The project is also designed to be resilient, to resist outside influences, and to be as self-sufficient as possible. It is not bound to any physical location, country, or government, all its software and hardware are free and open-source, and the project's main publications can all be read offline. In addition, we try to stay away from depending on large organizations - while we may not have as many resources, we can work with less bureaucracy hindering our progress.

+

Finally, we want the project to be representative of all humanity. So the project's community is meant to be safe, inclusive, and accepting and built on kindness and respect. It is understanding of everything except intolerance, but it will not tolerate any intolerance.

+ + +
+
+ + + + + + + + + diff --git a/relativity-hub/index.html b/relativity-hub/index.html new file mode 100644 index 0000000..a34d90d --- /dev/null +++ b/relativity-hub/index.html @@ -0,0 +1,140 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Relativity Hub

+ +

This page contains subpages that are relativity-related. Relativistic calculations are of primary interest for the Elara Two and Elara Three stages of the project, but they are necessary for some high-precision spacecraft dynamics calculations in Elara One as well.

+

Index

+ +

External sources

+ + + +
+
+ + + + + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..09a65df --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://elaraproject.github.io/elara-hub/sitemap.xml diff --git a/screens.css b/screens.css new file mode 100644 index 0000000..e69de29 diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..db64a54 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.23606797749979}},"df":8,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2},"2":{"docs":{},"df":0,"9":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"*":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}},"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}}},"8":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1},"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}},"1":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":5.0990195135927845},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":12,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"0":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":4},"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}}},"0":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951}},"df":2},"6":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2},"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":2}},"}":{"docs":{},"df":0,"u":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":4.358898943540674},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":9,".":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"?":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"8":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951}},"df":1},"7":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1,"7":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}},"9":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1}}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3},"e":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"/":{"docs":{},"df":0,"∂":{"docs":{},"df":0,"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1},"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979}},"df":1}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2}}}},"3":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":8,".":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1,"9":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.4142135623730951}},"df":1},"k":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"1":{"docs":{},"df":0,"7":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4},"e":{"docs":{},"df":0,"8":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.0}},"df":2,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"4":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":7,"0":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"p":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"a":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":7,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}},"0":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}},"6":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":7,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}},"7":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1,"8":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":3,"1":{"docs":{},"df":0,"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1}}}}},"9":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2,"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,")":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"[":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":7}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907}},"df":9,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1},"m":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":7}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":2}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":5.744562646538029},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":3.7416573867739413}},"df":5,";":{"docs":{},"df":0,"'":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951}},"df":1}}}}},"[":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"u":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":4},"z":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":3.1622776601683795}},"df":1}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":8}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.123105625617661}},"df":4},"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":3.3166247903554}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":2}}}}}}}}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}}}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":4},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":2}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":3}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0}},"df":1,"!":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"[":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772}},"df":1},"[":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":3.4641016151377544}},"df":5,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":4}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1,"=":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"{":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":3,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}},"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":6,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}}}},"y":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907}},"df":2}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":12},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":7}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.23606797749979}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":2,"{":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":2}}}}}}},"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.23606797749979}},"df":1,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":3}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":2}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":2.0}},"df":4}},"n":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":5}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.6457513110645907}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":7}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1},"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.8284271247461903}},"df":1},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":4},"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":7,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"6":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":1}},"a":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.4142135623730951}},"df":6,"u":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":5}}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":5,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0}},"df":1,"'":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":4}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.23606797749979}},"df":3}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":3}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":3}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":5},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":2}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":2},"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.0}},"df":3},"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":2.8284271247461903}},"df":3,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":2},"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772}},"df":2}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6}},"u":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3},"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":4},"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":10},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5}},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":5},"s":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":7}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":3}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":4},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951}},"df":4,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":3},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1},"s":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":3},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":4}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}}}}},"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"x":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}},"z":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":12,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":5}}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":4,"i":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1}}}},"\\":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"a":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2},"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":3.1622776601683795}},"df":2}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3}}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":4}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":5}}}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178}},"df":1,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":2}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.242640687119285},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.23606797749979}},"df":12}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":7}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.8284271247461903}},"df":2}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":5}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3}}}},"f":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":4}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3,"_":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"q":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1},"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.4641016151377544},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":10}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2},"t":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3},"s":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1,"k":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":7}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":4}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":6}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":6}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":5.656854249492381}},"df":3,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979}},"df":2}}}}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":3.872983346207417},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":2,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":10}},"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"^":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}},"y":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}}},"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":12}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2,"'":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":2.449489742783178}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":3}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":7.810249675906654},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":23,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"f":{"docs":{},"df":0,"x":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"g":{"docs":{},"df":0,"f":{"docs":{},"df":0,"x":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,")":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"’":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}},"ä":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":5,"{":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":2}}}}}}},"v":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.8284271247461903}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":3}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}}}},"q":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":6.4031242374328485},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":10,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":2}}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":5}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772}},"df":1,"u":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":6,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":7}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"s":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2},"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951}},"df":3,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":6,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"(":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1,"1":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"0":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}},"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":3.1622776601683795}},"df":6,"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}},"{":{"docs":{},"df":0,"(":{"docs":{},"df":0,"n":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.23606797749979}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":1}}}}}}}}}}},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":1}}}}}}}}},"z":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":1}}}}}}}}}}},"{":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}}}},"q":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1},"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951}},"df":3}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":5}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.47213595499958}},"df":5}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":6}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":5},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":15}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":5.830951894845301},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":10}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.0}},"df":3},"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":2.0}},"df":4}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.7320508075688772}},"df":1}}}},"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":2.23606797749979}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1},"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3},"4":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.0}},"df":1},"u":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}},"2":{"docs":{},"df":0,"l":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"8":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"\\":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"y":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":5.656854249492381},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":5.744562646538029},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.4641016151377544},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":2},"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,")":{"docs":{},"df":0,"^":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"g":{"docs":{},"df":0,"}":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772}},"df":1},"n":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}},"m":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"b":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1,")":{"docs":{},"df":0,"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"|":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3,"z":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":3}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":3.4641016151377544},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.358898943540674},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":5.656854249492381},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":14}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":6}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"z":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.123105625617661},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3}}}}}}}},"d":{"docs":{},"df":0,"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":2}}}}},"a":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.0}},"df":1,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"j":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":13}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":3,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,")":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}},"f":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.123105625617661},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"(":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":3,"n":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":3.872983346207417}},"df":10}}}},"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}},"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":7}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":5,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.23606797749979}},"df":1,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":2}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":2},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":2,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3,";":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951}},"df":1}},"4":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"h":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"1":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":2},"3":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":1}}}},"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.0}},"df":3,"'":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1},"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":7}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907}},"df":1},"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907}},"df":1}}}}}},"g":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":3}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2},"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":2.0}},"df":3,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":3}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"c":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"f":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"a":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"#":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"f":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"%":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"j":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"z":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"c":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"~":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"~":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"x":{"docs":{},"df":0,"w":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"9":{"docs":{},"df":0,"l":{"docs":{},"df":0,"9":{"docs":{},"df":0,"x":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"y":{"docs":{},"df":0,"y":{"docs":{},"df":0,"k":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"h":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"?":{"docs":{},"df":0,"v":{"docs":{},"df":0,"=":{"docs":{},"df":0,"3":{"docs":{},"df":0,"q":{"docs":{},"df":0,"j":{"docs":{},"df":0,"z":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"3":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"x":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":9,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":3}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}},".":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":7,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":5}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1,"\\":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1},"r":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.358898943540674}},"df":8}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":2}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":9},"s":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"[":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":3}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.449489742783178}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":4,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}}}}}},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":5}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":4.242640687119285},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2,"_":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"^":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1},"f":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1},"6":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":3.872983346207417},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":12,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951}},"df":2},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}},"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"u":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":4},"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"’":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"j":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":3,"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"z":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"'":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.6457513110645907}},"df":1}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}},"k":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.0}},"df":1,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}}},"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"h":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1}}}}}}},"k":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"/":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":4}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"$":{"docs":{},"df":0,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"g":{"docs":{},"df":0,"}":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"g":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.23606797749979}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951}},"df":2}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":2}}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":2}}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":3},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":2,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"z":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"f":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3,"(":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1},"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1}}}}}},"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,")":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"j":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"z":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"[":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"\\":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772}},"df":3}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}}},"h":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":9}}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.0}},"df":4}}},"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"h":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.0}},"df":7,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}},"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":2},"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":2},"p":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2},"w":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":2}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"$":{"docs":{},"df":0,")":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":5}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":6,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":12}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"v":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":2.0}},"df":5}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":2}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}},"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"}":{"docs":{},"df":0,"^":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"{":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1,"d":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1,"\\":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.449489742783178}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"{":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772}},"df":1,"}":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1}}}}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}},"c":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":2},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":7,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":2}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/menu/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"j":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":2,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":8,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/menu/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":2.0}},"df":8}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}},"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":3}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3,"i":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":1}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"q":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.449489742783178}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":3,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0}},"df":1,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}},"]":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.7320508075688772}},"df":4,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":2}},"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":2,"]":{"docs":{},"df":0,"]":{"docs":{},"df":0,"(":{"docs":{},"df":0,"@":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951}},"df":1}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":7}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":6}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":9,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":4}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":4}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":3}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":15},"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0}},"df":1}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":5}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":2,"2":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1},"6":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":1}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1}}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5,"d":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}}}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.0}},"df":1}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.7320508075688772}},"df":15,"c":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":2}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":9}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":7},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":7,"=":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":3}}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":4}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":8,"g":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":5,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":5,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":2}}}}}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":9}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":3}}}}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":5,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":7}},"c":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":3},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":2,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":4.242640687119285},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772}},"df":3,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":6}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"(":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":3.0}},"df":1}},"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.23606797749979}},"df":2,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0}},"df":2}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1}}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":1,"t":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907}},"df":1}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":3}},"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":5.0990195135927845},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":9}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1}}}}}},"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979}},"df":4,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,":":{"docs":{},"df":0,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":6}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":5}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":3}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772}},"df":1},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1,"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":17,"'":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":4}}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.23606797749979}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":3}}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}}},"q":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4}}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":3.7416573867739413}},"df":2,"(":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}},"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.449489742783178}},"df":1,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}},"_":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":2},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":2,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":4.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":3}}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0}},"df":1}}}},"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":4,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}},"z":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":6}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":3}},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}}}}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.4142135623730951}},"df":5,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":3}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"u":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"d":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":5,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}},"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":4}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"r":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":3}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":8}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":4}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}}}},"h":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":6,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.7320508075688772}},"df":2}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":4.69041575982343},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":2}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907}},"df":5}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":5,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":10},"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.0}},"df":4}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"ö":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"z":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":2}}}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":13}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772}},"df":2}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":8,"m":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":6,"u":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":5}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":3.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":6,"f":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3,"(":{"docs":{},"df":0,"2":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951}},"df":1}}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1},"k":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.0}},"df":1}},"z":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.0}},"df":1,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}},"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":3.0}},"df":1,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":2}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":4}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.1622776601683795},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":5,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"1":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}},"2":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":11}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":6,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":3}}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.449489742783178}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":6}},"f":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":3,"i":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":4}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":2}}}},"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.23606797749979}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":2.6457513110645907}},"df":5,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":8}}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":4,"u":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":3}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.0}},"df":2}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2,"o":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":8}}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":3}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":2}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":7},"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":3,"_":{"docs":{},"df":0,"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1},"j":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":7}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.0}},"df":5}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":7,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951}},"df":5}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":6}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":4.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":4,"$":{"docs":{},"df":0,")":{"docs":{},"df":0,"$":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"c":{"docs":{},"df":0,"}":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1},"f":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772}},"df":1},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":2,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":3}},"d":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":8}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178}},"df":1}}}},"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4},"q":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":3}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":6}},"x":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951}},"df":3,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":3}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"'":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":4}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":2}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":5.385164807134504},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":2.449489742783178}},"df":3,"(":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":2.8284271247461903}},"df":1}},"_":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1},"{":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772}},"df":1}}}}},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":9},"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":6}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":4}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":6,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.449489742783178}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":5}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":12,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":2},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":3}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951}},"df":2}},"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":2.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772}},"df":2}}},"w":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":8,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":4}}}},"|":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"|":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"}":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}}}}},"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":4.123105625617661},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":5,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":2}},"\\":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"^":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"0":{"docs":{},"df":0,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554}},"df":1},"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1},"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554}},"df":1,"+":{"docs":{},"df":0,"3":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.123105625617661}},"df":4,"'":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"q":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":7,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":4.242640687119285},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":23,"a":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":4}},"i":{"docs":{},"df":0,"z":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":2}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":4.123105625617661}},"df":1}}}}}}}}},"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.0}},"df":4,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}},"(":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.7320508075688772}},"df":1}},"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.123105625617661}},"df":7}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.8284271247461903},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.23606797749979}},"df":3}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":3.605551275463989},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.358898943540674},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":3.4641016151377544},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":6.48074069840786},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.23606797749979}},"df":7}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6,"f":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951}},"df":6}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0}},"df":3}}}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":4},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":3.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":6}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.4142135623730951}},"df":6}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"x":{"docs":{},"df":0,")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"2":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.7320508075688772}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.7320508075688772}},"df":10}},"s":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":2}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":7,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":3}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951}},"df":2,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1},"2":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":10}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.6457513110645907}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}},"g":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.4142135623730951}},"df":7}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":5}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1},"k":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.4142135623730951}},"df":15,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":5}},"m":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772}},"df":7},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":7}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.3166247903554},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":3.872983346207417},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":4.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":4.69041575982343},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.4142135623730951}},"df":11,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":4,")":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"4":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"5":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1},"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1},"j":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1},"k":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":3},"1":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.4142135623730951}},"df":1}},"f":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}},"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.4142135623730951}},"df":1},"\\":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.7320508075688772}},"df":1}}}}}},"x":{"docs":{},"df":0,"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":3.7416573867739413},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":2.23606797749979},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":2.6457513110645907},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":5.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.449489742783178}},"df":7,"'":{"docs":{},"df":0,"'":{"docs":{},"df":0,"=":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}},"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},"(":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1},"x":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}},")":{"docs":{},"df":0,"}":{"docs":{},"df":0,"{":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2},"n":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}},"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":2.6457513110645907}},"df":1},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.7320508075688772}},"df":2}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0}},"df":1},"v":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}}},"z":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.7320508075688772},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.4142135623730951},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":3.4641016151377544},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":2.0}},"df":5,"'":{"docs":{},"df":0,"(":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}},")":{"docs":{},"df":0,"{":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}},"^":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}},"_":{"docs":{},"df":0,"0":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":2.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.4142135623730951}},"df":3,"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":2.449489742783178},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.4142135623730951}},"df":3}}}}}},"title":{"root":{"docs":{},"df":0,"1":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":2},"6":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":2},"p":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":2}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"2":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0}},"df":1}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":2}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":12}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/extra/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":2}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"b":{"docs":{"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":4},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://elaraproject.github.io/elara-hub/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/markdown-guide/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/menu/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{"https://elaraproject.github.io/elara-hub/meta/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/menu/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/multivar/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":2}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/h2-co2/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/app-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/funny/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/library-plans/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"tf":1.0},"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":6}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/relativity-hub/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/future-extensions/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"https://elaraproject.github.io/elara-hub/stages/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://elaraproject.github.io/elara-hub/standard-notation/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"tf":1.0}},"df":1}}}}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://elaraproject.github.io/elara-hub/integration-techniques/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://elaraproject.github.io/elara-hub/geometrized/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"tf":1.0}},"df":1}}}}}}},"documentStore":{"save":true,"docs":{"https://elaraproject.github.io/elara-hub/":{"body":"Welcome to Elara Hub!\nElara Hub is Project Elara’s knowledge base and project management tool. Or more simply, it’s where most of the work of the project is done! In keeping with the project ideals, Elara Hub is open-source and developed together by the community.\nWhat is this for?\nThink of this as a mixed community wiki/collaboration tool for the project. We organize things, plan things, write down notes, discuss project direction, and share knowledge with each other here. Everything is written using plaintext markdown files that are then automatically compiled into a website (which can both be viewed online and locally if working offline). \nThe interface is designed to be as simple and minimal as possible. Just read through each page, and navigate by the internal links in each page. The sidebar menu (and on mobile, the top menu) provide another way to quickly and easily switch files.\nQuick start\nYou probably want to read the [index page] first, from which you can go to any other page via the internal links. The index page is also easily accessible via the \"Home\" link in the left sidebar menu (on desktop) or top menu (on mobile).\nEditing guide\nTo get started, first install Zola. Also ensure you have Git installed. Then clone the Elara Hub repository:\ngit clone https://github.com/elaraproject/elara-hub.git\ncd elara-hub\n\nWithin that folder, run zola serve. You should see a local web address pop up - open that address in your browser, the site gives you a live preview as you edit. Then simply open the desired files in the content/ folder, and begin editing!\nElara Hub is written in a plaintext format called markdown. If you're not familiar with it, that's okay! Just see the [markdown guide].\nWhen adding new files, make sure to add internal links to that new file to at least one other markdown file. This ensures navigability! Internal links follow the format [[File name]](@/path-to-file.md), with the extra bracket differentiating them from web links.\nImportant to note: do not run a production build with zola build, always use zola serve when editing/viewing files locally for live preview. The production build appends the GitHub pages base url, meaning it does not work offline anymore. In addition, make sure your editor is configured to use spaces, not tabs, when editing code blocks! Otherwise they render oddly.\nThe site is easiest to edit with a code editor that has a command palette-style fuzzy-matching filepicker or fzf support.\nTechnical notes\nAll the standard markdown features are supported, including tables, math, images, code highlighting, etc. There is an optional menu but it is not required for reading the Elara Hub, because all pages are connected with internal links. The site is statically-generated by Zola and uses almost no JavaScript.\nFAQs\n\nWhy no PDF version?\n\nFor several reasons. First, PDFs are very hard to make accessible, and are not really responsive. Second, the internal link system used by Elara Hub is hard to translate into PDF format. Third, the website can already be built locally, and the markdown source files can be read locally too, without any build step necessary.\n\n\nWhy do I see JavaScript on a static website?\n\nThe website tries to use minimal JS to load quickly and work well on all devices. One tiny snippet of JS is necessary to polyfill a feature the Zola static site generator doesn't have. The rest of the JS is for math rendering, diagram rendering, etc. The website can still function without JS enabled.\n\n\n\nImportant info\nEverything on Elara Hub is released into the public domain. It may not be patented, as everyone has equal rights to it under law. However, otherwise, you may do whatever you want with it, including sell it (with or without attribution) or use it in your own work (noncommercial or commercial).\n","id":"https://elaraproject.github.io/elara-hub/","title":"Index"},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"body":"Overview\nCurrently what is necessary is to make progress on both the theoretical and experimental fronts. On the theoretical front, detailed computer simulations and models should be made. On the experimental front, the first implementation should be well underway within 6 months.\n6-month goals\n\nResearch goals\n\nComplete a third paper of full research paper length (12-15 pages)\nComplete designs of the transmitter and receiver such that the individual components are ready to test, and whenever possible, perform computer simulations on each component\nBegin in-lab experimentation and demonstrate concrete results\n\n\nProject goals\n\nRecruit at least an additional 5 members\nGet at least one more benefactor, member of faculty, or consultative advisor on board\nEstablish a unified project front and clear project organization\n\n\n\nTasklist\nGiven the established 6-month goals, the following tasks must be completed. Note that this task list may be added to, but primarily for the purpose of clarification/expanding detail, and it is best not to remove any items from this task list.\n\n\nComplete paper 2\n\nCreate the 6-month roadmaps\n\nClean up project and reorganize\n\n\nCreate Elara Hub - dedicated project management and knowledge base website, see [New Elara Hub plan]\n\n\nDesign\n\nCode with zola (include KaTeX support, Mermaid flow charts, sequence diagrams, and gantt diagrams, as well as charter graphs)\n\nPublish\n\n\n\nOrganize project knowledge base on Elara Hub\n\n\n\nComplete microwave transmitter design\n\n\nSketch out design\n\nAnalyze design analytically or through numerical simulation\n\nCreate full description of design, including relevant diagrams and simulation/theoretical analysis\n\n\n\nComplete microwave receiver design\n\n\nSketch out design\n\nAnalyze design analytically or through numerical simulation\n\nCreate full description of design, including relevant diagrams and simulation/theoretical analysis\n\n\n\nComplete combined transmitter-receiver system design\n\n\nCombine designs of transmitter and receiver\n\nAnalyze design analytically or through numerical simulation\n\nCreate full description of design, including relevant diagrams and simulation/theoretical analysis\n\n\n\nComplete experimental plans\n\n\nPlan for experiment 1 (successful generation of microwaves at >40% efficiency and detection at 40 cm distance from source)\n\nPlan for experiment 2 (successful transmission of microwaves over 40 cm distance at >30% efficiency)\n\nPlan for experiment 3 (successful conversion of visible light and transmission of microwaves at >30% efficiency)\n\n\n\nConduct experiments\n\n\nExperiment 1\n\n\nPrepare materials, timing, and configuration\n\nConstruct apparatus\n\nConduct experiment\n\n\n\nExperiment 2\n\n\nPrepare materials, timing, and configuration\n\nConstruct apparatus\n\nConduct experiment\n\n\n\nExperiment 3\n\n\nPrepare materials, timing, and configuration\n\nConstruct apparatus\n\nConduct experiment\n\n\n\n\n\n","id":"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/","title":"6-month roadmap 1"},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"body":"A partial differential equation or PDE is any equation that contains a function and its partial derivatives. The general form of a PDE is:\n$$\nF \\left(x, y, \\dots, f(x, y), \\dots\\frac{\\partial f}{\\partial x}, \\frac{\\partial f}{\\partial y}, \\dots \\frac{\\partial^n f}{\\partial x^n}, \\frac{\\partial^n f}{\\partial y^n} \\dots \\right) = G(x, y, \\dots)\n$$\nTo shorten derivatives, we often use the $\\nabla$ symbol, where:\n$$\n\\nabla^2 u = \\frac{\\partial^2 u}{\\partial x^2} + \\frac{\\partial^2 u}{\\partial y^2} + \\frac{\\partial^2 u}{\\partial z^2}\n$$\nSome specific examples of PDEs include the heat equation:\n$$\n\\frac{\\partial u}{\\partial t} = \\alpha^2 \\nabla^2 u\n$$\nThe wave equation:\n$$\n\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\nabla^2 u\n$$\nAnd Poisson's equation:\n$$\n\\nabla^2 u = f\n$$\nPDEs can have many, many solutions. For instance, take the PDE:\n$$\n\\frac{\\partial^2 u}{\\partial x^2} = 0\n$$\nThe general solution of this PDE is $u(x, y) = xf(y) + g(y)$. And yes, those can be any functions of $y$, whether they be $e^y$ or $y \\sin(y)$ or $y + 3y - \\sqrt{y}$. Thus, just like ODEs need initial conditions to give unique solutions, PDEs need boundary conditions to give unique solutions. The typical set of boundary conditions for a PDE are values at the edges of the domain of the PDE (e.g. $u(x, t) \\to 0$ as $x \\to \\pm \\infty$). When the PDE is dependent on time, then the boundary condition for $t \\to 0$ is often called an initial condition - remember, for PDEs, initial conditions are considered a type of boundary condition.\nNumerically solving PDEs\nThe most common methods of solving PDEs numerically are the finite difference, finite element, and boundary element methods.\nEncode derivatives as matrices - take wave equation as example. We have:\n$$\n\\frac{\\partial^2 u}{\\partial t^2} = c^2\\frac{\\partial^2 u}{\\partial x^2}\n$$\nWe want to discretize the second partial derivative. Recall that:\n$$\n\\frac{\\partial^2 u}{\\partial x^2} \\approx \\frac{u(x - h, t) + 2u(x, t) + u(x + h)}{h^2}\n$$\nOr, alternatively written:\n$$\n\\frac{\\partial^2 u}{\\partial x^2} \\approx \\frac{u_{i - 1, j} + 2u_{i, j} + u_{i + 1, j}}{h^2}\n$$\nThis works in all cases except at the left and right boundaries of the domain, as there is not another point to the left of the boundary to take the central difference. Instead, we use the single-sided difference - for the left, we have:\n$$\n\\frac{2u_{i, j} - 5u_{i+ 1, j} + 4u_{i + 2, j} - u_{i+3, j}}{h^2}\n$$\nAnd for the right, we have:\n$$\n\\frac{-u_{i-3, j} + 4u_{i - 2, j} - 5u_{i - 1, j} + 2u_{i, j}}{h^2}\n$$\nNote: see https://web.media.mit.edu/~crtaylor/calculator.html for a calculator for these values (enter 0, 1, 2, 3 for the left-handed 2nd derivative and -3, -2, -1, 0 for the right-handed 2nd derivative).\nNow, partial derivatives are linear operators, just like matrices. So we can spatially discretize the equation by turning the 2nd spatial partial derivative into a matrix $A$ acting on the solution vector $U$:\n$$\n\\frac{\\partial^2 u}{\\partial x^2} = AU\n$$\nWhere:\n$$\nAU=\\begin{bmatrix}\n2 & -5 & 4 & -1 & & & \\\\\n1 & -2 & 1 & & & \\\\\n& 1 & -2 & 1 & & & \\\\\n& & \\ddots & \\ddots & \\ddots & \\\\\n& & & 1 & -2 & 1 & \\\\\n& & -1 & 4 & -5 & 2\n\\end{bmatrix}\n\\begin{bmatrix}\nu_{1, 1} \\\\\nu_{1, 2} \\\\\n\\vdots \\\\\nu_{1, n - 1} \\\\\nu_{1, n} \\\\\nu_{2, 1} \\\\\n\\vdots \\\\\nu_{m, n}\n\\end{bmatrix}\n= \\begin{bmatrix}\n2u_{1, 1} -5 u_{1, 2} + 4 u_{1, 3} - u_{1, 4} \\\\\nu_{1, 3} - 2u_{1, 2} + u_{1, 1} \\\\\nu_{1, 4} - 2u_{1, 3} + u_{1, 2} \\\\\n\\vdots \\\nu_{i, 1} - 5u_{i, 2} + 4u_{i, 3} - u_{i, 4} \\\\\nu_{i, 3} - 2u_{i, 2} + u_{i, 1} \\\\\n\\vdots \\\nu_{i, n} - 2u_{i, n - 1} + u_{i, n - 1} \\\\\n-u_{i, n - 3} + 4u_{i, n - 2} -5u_{i, n - 1} + 2u_{i, n}\n\\end{bmatrix}\n$$\nBy discretizing the spatial derivative, the partial time derivative simply becomes an ordinary time derivative. Thus we can rewrite as:\n$$\nU'' = c^2 AU\n$$\nWhich is an ordinary differential equation that can be solved with conventional ODE solvers. The only thing left is to compute an initial condition $U_0(x)$ and $U_0'(x)$ (if you know the initial condition you can differentiate it to get the initial time derivative).\nThis method works well even in the higher-dimensional case. For instance, consider the generalized wave equation:\n$$\n\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\nabla^2 u\n$$\nBy encoding the Laplacian $\\nabla^2 u$ as a matrix $A$ acting on $U$, the same approach can be used as with the other approaches previously mentioned. In fact, this approach works for all linear partial differential equations that have one time and one or several space derivatives.\nFor other cases of linear PDEs that are not time-based, such as Poisson's or Laplace's equation, they can be generally written in the form:\n$$\nAU = B\n$$\nAnd solved using standard linear algebra techniques.\nFinally, for nonlinear PDEs, they can be generally written in the form:\n$$\nAU - f(U) = 0\n$$\nWhich is a rootfinding problem that can be solved with Newton's method:\n$$\nU_{i + 1} = U_{i} - J^{-1}U(x_0)\n$$\nSources\n\nhttps://www.diva-portal.org/smash/get/diva2:1438836/FULLTEXT01.pdf\nhttps://youtu.be/hxGA1Je1P-s\nhttps://github.com/lukepolson/youtube_channel/blob/main/Python%20GPU/schrodinger.ipynb\nhttps://gist.github.com/c0rychu/6fc08cf5cdec2cc78a1f9334d103a869#file-schrodingereq_1d_tutorial-ipynb\nhttps://mathematica.stackexchange.com/questions/221207/finite-difference-method-for-1d-wave-equation\nhttps://nextjournal.com/sosiris-de/pde-2018\nhttps://empossible.net/wp-content/uploads/2019/08/Lecture-4a-Finite-Difference-Method.pdf\nhttps://aquaulb.github.io/book_solving_pde_mooc/solving_pde_mooc/notebooks/01_Introduction/01_00_Preface.html\n\nElara-math integration\nIn the future, the differential equation solver RK4 will be ported from elara-array to elara-math. elara-math will then have two differential equations solver classes - odesolve, which solves (singular or systems of) ordinary differential equations, and pdesolve for (singular or systems of) partial differential equations. Its API is to be inspired by Mathematica's ndsolve - see https://reference.wolfram.com/language/ref/NDSolve.html\nThe proposed numerical API:\nh = 0.1\nn = 100\nc = 1\n\n# Auto-compute sparse matrix\n# for ∂2u/∂x^2\n# with 2nd-order approximation to second-order derivative\ndiff_x = CentralDifference(2, order=2, step_size=h, grid_size=n)\n\n# Solve as ODE, etc. etc.\n# ... \n\nThe proposed symbolic API:\ndef pde(c=1):\n\treturn D(D(u, t), t) - c ** 2 * D(D(u, x), x)\n\nsolver = PDEsolve(pde, bc=\"Dirichlet\")\nu = solver.compute(grid=\"disk\")\n\nplt.title(\"Wave equation results\")\nplt.imshow(u)\nplt.show()\n\nSolving vector differential equations\nTo solve vector differential equations, it is necessary to break up the vector differential equation into its components, and then solve for each of the components. For example, the first two of Maxwell's equations result in 2 trivial equations. The second two are more complex, as the curl of a vector field produces another vector field. Thus, we must instead rewrite the curl component-by-component. The complete equations are:\n$$\n\\frac{\\partial E_x}{\\partial x} + \\frac{\\partial E_y}{\\partial y} + \\frac{\\partial E_z}{\\partial z} = \\frac{\\rho}{\\epsilon_0}\n$$\n$$\n\\frac{\\partial B_x}{\\partial x} + \\frac{\\partial B_y}{\\partial y} + \\frac{\\partial B_z}{\\partial z} = 0\n$$\n$$\n\\frac{\\partial E_z}{\\partial y} - \\frac{\\partial E_y}{\\partial z} = -\\frac{\\partial B_x}{\\partial t}\n$$\n$$\n\\frac{\\partial E_x}{\\partial z} - \\frac{\\partial E_z}{\\partial x} = -\\frac{\\partial B_y}{\\partial t}\n$$\n$$\n\\frac{\\partial E_y}{\\partial x} - \\frac{\\partial E_x}{\\partial y} = -\\frac{\\partial B_z}{\\partial t}\n$$\n$$\n\\frac{\\partial B_z}{\\partial y} - \\frac{\\partial B_y}{\\partial z} = \\mu_0 \\left(J_x + \\epsilon_0 \\frac{\\partial E_x}{\\partial t}\\right)\n$$\n$$\n\\frac{\\partial B_x}{\\partial z} - \\frac{\\partial B_z}{\\partial x} = \\mu_0 \\left(J_y + \\epsilon_0 \\frac{\\partial E_y}{\\partial t}\\right)\n$$\n$$\n\\frac{\\partial B_y}{\\partial x} - \\frac{\\partial B_x}{\\partial y} =\\mu_0 \\left(J_z + \\epsilon_0 \\frac{\\partial E_z}{\\partial t}\\right)\n$$\nSo Maxwell's equations result in 8 coupled PDEs. However, only 6 of them are independent - any system that satisfies the last 6 PDEs also must satisfy the first 2, so long as the boundary conditions satisfy the conservation of charge.\nHere, note that for a solution, the current density must be set, which consists of one function each for $J_x, J_y, J_z$.\nCommon PDEs\nWave equation:\n$$\n\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\nabla^2 u\n$$\nHeat/diffusion equation:\n$$\n\\frac{\\partial T}{\\partial t} = \\alpha^2 \\nabla^2 T\n$$\nLaplace's equation:\n$$\n\\nabla^2 u = 0\n$$\nPoisson's equation:\n$$\n\\nabla^2 u = f(u)\n$$\nBurger's equation:\n$$\n\\frac{\\partial u}{\\partial t} + c \\frac{\\partial u}{\\partial x} = \\nu \\frac{\\partial^2 u}{\\partial x^2}\n$$\nContinuity equation:\n$$\n\\frac{\\partial \\rho}{\\partial t} + \\nabla \\cdot u = 0\n$$\nNavier-Stokes:\n$$\n\\nabla \\cdot u = 0\n$$\n$$\n\\rho \\left(\\frac{\\partial u}{\\partial t} + (u \\cdot \\nabla) u\\right) = -\\nabla p + \\mu \\nabla^2 u + \\rho g\n$$\nMaxwell's equations:\n$$\n\\nabla \\cdot E = \\frac{\\rho}{\\epsilon_0}\n$$\n$$\n\\nabla \\cdot B = 0\n$$\n$$\n\\nabla \\times E = -\\frac{\\partial B}{\\partial t}\n$$\n$$\n\\nabla \\times B = \\mu_0 \\left(J + \\epsilon_0 \\frac{\\partial E}{\\partial t}\\right)\n$$\nEinstein's field equations:\n$$\nG_{\\mu \\nu} = \\frac{8\\pi G}{c^4} T_{\\mu \\nu}\n$$\nEquations of quantum mechanics:\n\nSchrödinger equation\nPauli equation\nKlein-Gordon equation\nDirac equation\n\nEuler-Lagrange equations, Hamilton's equations\nBlack-Scholes equation\n","id":"https://elaraproject.github.io/elara-hub/all-about-pdes/","title":"All about partial differential equations"},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"body":"\"New\" way to solve ODEs and PDEs that DOESN'T involve complicated computations or matrices (actually not new at all, but it might have potential):\nJust use Taylor series and automatic differentiation. Consider, for example, the ODE:\n$$\n\\frac{dy}{dx} = 3y + 2x^2, y(0) = 3\n$$\n$$\ny'' = 3y' + 4x, y' = 9\n$$\n$$\ny''' = 3y'' + 4, y'' = 27\n$$\n$$\ny''' = 3y''', y''=85\n$$\nYou can construct a Taylor series around the point $x = 0$ to approximate a solution $y(x)$ of the ODE, then use automatic differentiation to compute successive derivatives to refine that approximation. This approach doesn't have numerical precision errors, and it can be made arbitrarily precise, and also doesn't require complicated grids. And it can be extended for partial differential equations - you do the same, just with the partial derivatives version of Taylor series. And this works on all analytic functions, even non-elementary functions, so it's especially well-suited to arbitrary differential equations. The solver can use the Taylor remainder theorem to automatically choose the number of terms for the approximation to be within a specified maximum error tolerance.\nFor the Taylor series to be maximally accurate even at points far from the source, multiple taylor series is used. A new point $x_1$ is chosen based on the most distant point from the original point $x_0$ that satisfies the maximum error as defined by the Taylor remainder theorem. Then a new taylor series is constructed from the point $x_1$. This process can be repeated multiple times to generate an effective solution for all points in the domain.\n(Note: there are definitely optimizations that can be done to make the Taylor series converge faster while retaining the same algorithm for ODE/PDE solving, but that is for another time.)\n","id":"https://elaraproject.github.io/elara-hub/alt-de-solver/","title":"Alternate differential equation solver"},"https://elaraproject.github.io/elara-hub/app-plans/":{"body":"elara-geo\nRust reimplementation of https://github.com/tauzero7/GeodesicViewer\nelara-DE\nMake automated ODE and PDE solver. It should have the following features:\n\nHandle either single DE or system of DEs of any order\nSupport multivariable or single-variable scalar, vector, or tensor-valued function (or field) to solve for, as well as real or complex arguments\nEnter in ODE or PDE as with as boundary/initial conditions symbolically (with SymPy-like syntax)\n(Optional) compare solution to manually-inputted analytical solution\nGPU acceleration for fast solving\nSlope fields for first-order ODEs\nBuilt-in visualization tools for solutions (defaults to lines for single-variable functions, heatmaps for two-variable (3D) functions, and density plots for three-variable (4D) functions, with the colors automatically scaled based on max intensity and the opacity of each pixel scaled based on the inputted grid density)\nHas both a PINN (neural-network based) solver and a conventional grid-based solver.\n\nelara-cas\n(note: awaiting better name)\nelara-cas is a Qalculate replacement, with LaTeX printing output, a syntax-highlighted REPL, and an optional visual editor for inserting complicating expressions. \nElara CAS will use integral/diff eq solver from https://arxiv.org/abs/1912.01412\nUI inspired by https://github.com/bornova/numara-calculator\nThis should be the syntax:\n// Basic calculations (these are done symbolically)\n1 + 1\n\n// Declaring variables\nvar x, y, z\n\n// Declaring constants\nconst G, M := 2e30, m := 1, c := 3e8\n\n// Declaring expressions\n// note the UI includes an optional MathQuill-style visual editor\n// to insert expressions (which it then outputs with the CAS\n// language) for convenience\nschwarzschild = (2 * G * M) / c^2\n\n// Declaring functions\n// Note the same MathQuill-style visual editor is available\nu(x) // function prototype (useful for differential equations)\ng(x) = 3 * x // scalar-valued single variable\nf(x, y, z) = 3 * x^2 + 5 * y + z // scalar-valued multivariable\nh(x, y) = (5 * x + 4, 7 * x + 8) // vector-valued\n\n// Plot a function\n// in the UI you can choose the domain and range\n// with sliders and pan/zoom on the graph\nplot f\n\n// Evaluating functions\n// in the UI you can choose between a numerical answer (e.g. 5.114342)\n// or a symbolic answer (e.g. sqrt(2) / 2)\n// for numerical answers, any constants will be evaluated with their\n// assigned numerical values\nf(1, 4, 3)\n\n// Taking derivatives without explicit evaluation\ndudx = diff u // here x doesn't need to be specified as it is the only variable\n\n// Taking derivatives\ndfdx = diff f, x\ndfdx(2, 6, 1)\n\n// Taking the gradient\ngrad_f = grad f\ngrad_f(2, 6, 1)\n\n// Taking the indefinite integral symbolicallly\n// This uses a neural network solver under the hood\nint_f = integrate f, x\n// you can then evaluate the definite integral with\nint_f(6) - int_f(1)\n\n// Taking the definite integral symbolically\nintegrate f, x, 1, 6\n\n// Taking the definite integral\n// When doing so, the answer is computed\n// exclusively numerically\nquadrature f, x, 0, 5\n\n// Create equation\nmyeq = eq 5 * x^2 + 8 * x, 78 * x + 5\n\n// Solve equation\n// in UI there is the option to solve\n// symbolically or numerically\nsolve myeq, x\n\n// You can also use this as a lazy\n// expression rearranger\nsch_radius_eq = eq r_s, schwarzschild\nsolve sch_radius_eq, M // rearrange to get mass in terms of r_s\n\n// Substitution\nsubs myeq, x, 5 * y\n\n// Using ans\n5 * x^2 + 7 * sin(x)\nmynewexpr = ans\n\n// Note substitution is always symbolic\n// If you want to evaluate an expression\n// (not a function) then use eval\n// In eval you don't need to sub in the\n// value of any constants, just the variables\neval 2 * M * x^2 + 3 * t, { x = 6, t = 0.1 }\n\n// Solving ordinary differential equations\n// (can solve 1st or 2nd order ODEs)\n// This uses a neural network solver under the hood\nmydiffeq = eq dudx, 3 * u * x\ndsolve eq // symbolic solver\nndsolve eq // numerical solver - in UI there is option to show graph\n\n// Note however that Elara CAS is not suited\n// to complex numerical work or PDE solving,\n// both of which Elara DE specialize in\n\nThe very minimalist syntax only works because you cannot nest built-in functions like diff and integrate within other functions, and those functions are delimitated by the end of the line.\nElara Studio\nFor custom project elara test path tracer - you first export the UV unwrapped 3D models from your modeling tool, then in the path tracer GUI you can add PBR materials and lights and render. This path tracer BTW is very non essential, as the project has literally no need of a path tracer (we can just use Blender), so really it is just a proof of project technology.\nHowever this can be an alternative workflow - if the app provided a big built-in asset library (and one the user can add to) with things like materials, textures, lighting setups, models and so forth, then the renderer might actually be a good idea.\n","id":"https://elaraproject.github.io/elara-hub/app-plans/","title":"Project Elara app plans"},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"body":"The general algorithm is this:\n\nEmit a bunch of rays from the camera at $(x, y)$ positions for each pixel in the final image\nCalculate where they end up by numerically integrating along geodesics:\n\nIf they end up inside the event horizon, color should be black\nOtherwise, color should be a sample color of whichever patch of night sky is in the direction they hit\n\n\nSet the color of the pixel located at position $(x, y)$ based on the previous step\n\nNote that this has no global illumination as it is not a path tracer. A path tracer would actually generate photorealistic images, but this is just a proof of concept.\nI will write it in numpy first, then port it to Rust once I get it working.\n\nFirst, we position our black hole at the origin, $(0, 0, 0)$. We want to position our camera at $(6M, \\pi / 2, \\pi / 4)$ which should give a good view of the black hole.\nThen, we want to produce our rays. Recall that a ray is typically given by:\n$$\n\\vec R(t) = \\vec O + \\vec t D\n$$\nHere, $\\vec O$ is the origin, and $\\vec D$ is the direction vector of the ray. Note that the normalized velocity vector is exactly the same thing as the direction vector, so $\\vec D$ can also be interpreted as a normalized velocity vector.\nHowever, we have a slight complication. Recall that rays of light are bent in curved spacetime. Therefore, the simple ray equation does not apply. We instead need to numerically integrate to find the position of a ray at time $t$. To do this, we will use two derived equations from Schwarzschild spacetime:\n$$\n\\frac{d^2 r}{ds^2} = -\\frac{M}{r^2} + \\frac{l^2}{r^3} - \\frac{3Ml^2}{r^4}\n$$\n$$\n\\frac{d^2 \\phi}{ds^2} = -\\frac{2l}{r^3} \\frac{dr}{ds}\n$$\n(there is a third equation, $\\theta'' = 0$, but it's unnecessary to really mention it, as $\\theta$ is constant)\nWe derived the two above equations from the radial motion equation and the $p_\\phi$ constant of motion equation, and taking the derivative to get a second-order differential equation (which also fortunately cancels out the square roots and all the annoyances of squares appearing in derivative terms).\nHere, we use the affine parameter $s$ as a substitute for time $t$, because light in General Relativity doesn't really experience time as it moves. So $s$ is like a \"substitute\" for time that we can effectively consider time, just for a light ray instead of an ordinary massive particle.\nWe will integrate from time $t_0$, when the rays leave the camera, to time $t_f$, where we can arbitrarily set $t_f$. We want to then find the position vector $\\vec R(t)$ of the ray at $t_f$, or $\\vec R(t_f)$. If $|\\vec R(t_f)| < 2M$, that means the ray vector is inside the event horizon, so we want to return a color of black. Otherwise, we sample the color of the patch of night sky the ray position vector hits. \nAlternatively, we can simply find the vector $\\vec W = \\vec R(t_r) - \\vec O$, where $\\vec W$ is the vector pointing from the origin (where the camera is) to the ray vector position. By converting it to Cartesian coordinates and then normalizing this vector, we have the $(x, y, z)$ coordinates of the ray vector position in terms of the camera's world unit sphere. Now this is where equirectangular textures come in handy, because we can then take those $(x, y, z)$ coordinates and find the $(u, v)$ coordinates of the world texture, from which we can sample the color. The formula is:\n$$\nu = \\frac{1}{2} + \\frac{\\operatorname{atan2}(W_z, W_x)}{2\\pi}\n$$\n$$\nv = \\frac{1}{2} + \\frac{\\operatorname{arcsin}(W_y)}{\\pi}\n$$\nFor each pixel, we will repeat these steps - creating a ray, tracing the ray, and then finding the final color it outputs, and assigning that color to that pixel. Then, we will have our complete image of the black hole.\n\n$$\n\\left(\\frac{dr}{d\\phi}\\right)^2 = \\frac{r^4}{b^2} - \\left(1 - \\frac{r_s}{r}\\right) \\left(\\frac{r^4}{a^2} + r^2\\right)\n$$\nNow we take the limit as $m \\to 0$, therefore $a \\to \\infty$ and $b \\to \\infty$, so:\n$$\n\\left(\\frac{dr}{d\\phi}\\right)^2 = - \\left(1 - \\frac{r_s}{r}\\right)r^2\n$$\nWe take the derivative again to get a second-order differential equation that doesn't have a squared derivative:\n$$\n\\frac{d^2 r}{d\\phi^2} = \\frac{1}{2} r_s - r\n$$\n\nFor debugging, we want to use the standard Newtonian $a = -\\frac{GM}{r^2}$ equation to test.\nhttps://github.com/tyler-a-cox/black_hole_raytracer/tree/master\n","id":"https://elaraproject.github.io/elara-hub/black-hole-raytracing/","title":"Black hole raytracing"},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"body":"Design goals:\n\nA pure Rust library designed NOT for FFI, but for use from only Rust.\nMinimal set of features, leave more complex math/science functions (e.g. convolution, diff eq solvers) for elara-math to implement\nFAST - really really really optimized and fast!!!\n\n// Macros for convenient array creation up to 3D\n// However they are not recommended for array data\narr![1, 2, 3, 4];\narr![[1, 2], [3, 4]];\n\n// Explicit array creation\n// This is the *only* time data is allocated\nNdArray::new(your_vec);\nNdArray::arange(0..10);\n\n// methods\n// these either operate in-place\n// or don't perform any manipulations on the underlying\n// data (like the transpose function) to prevent \n// copying for efficiency\narr.dot(&arr2);\narr.matmul(&arr2);\narr.product();\narr.len();\n\n// Operations default to in-place ops to prevent additional\n// copying or moves of data\narr + arr2; // returns the result in arr\narr * arr2;\narr / arr2;\n\n// Indexing (for both getting and setting data)\n// these are implemented by two index implementations,\n// one for views and one for direct indices\nimpl Index<[f64; N]> for NdArray<T, N>;\nimpl Index<NdArrayView<f64, N>> for Ndarray<T, N>;\n\n// Construct a view\n// These replace numpy-style slices\nlet yourview<f64, N> = NdArrayView::row_view(start, end, step);\n\narr[[1, 3, 5]]; // direct indexing\narr[yourview]; // view indexing\n\n// elara-array uses a specialized\n// binary file format for serializing arrays\narr.save(\"array.elr\");\nNdArray::from_file(\"array.elr\");\n\n// The entire library supports full error handling\n// and is designed to be robust even on error\n\nAPI reference:\n// utility methods\nfn new();\nfn zeros();\nfn ones();\nfn eye();\nfn random();\nfn size(); // number of elements\nfn ndim();\nfn shape();\nfn flatten();\nfn reshape();\nfn mapv(); // elementwise in-place map\n\n// arithmetic methods\nfn sin();\nfn cos();\nfn tan();\nfn arcsin();\nfn arccos();\nfn arctan();\nfn sinh();\nfn cosh();\nfn tanh();\nfn exp();\nfn sqrt();\nfn cbrt();\nfn log();\n\n// statistical methods\nfn sum();\nfn min();\nfn max();\nfn mean();\nfn median();\nfn stddev(); // standard deviation\n\n// linalg methods\nfn dot(); // 1D only\nfn matmul(); // 2D only\nfn transpose(); // 2D only\n\nError API:\nstruct ErrorInfo {\n source: &'static str, // the function that called the error\n file: &'static str,\n line: usize,\n additional_info: String\n}\n\npub enum {\n SomeError1(ErrorInfo),\n SomeError2(ErrorInfo)\n}\n\nSlice/View API:\npub fn slice(&self, slice: &[Range<usize>]) -> ArrayView<T, N>;\npub struct ArraySlice;\n\n// usage\nlet a = arr![[0.0, 1.0], [2.0, 3.0]];\n\n// returns view of entire array\na[&[.., ..]]\n\n// returns view of 1st inner element\na[&[s!(0), ..]] // this is equal to a[&[..1, ..]]\n\n// returns view of range\na[&[1..2, 1..2]]\n\n// for more exotic slices use the dedicated slicer\nlet s = ArraySlice::new_columns([1, 5, 8]);\na[s] // returns another view\n\n\n\nChange all existing copying operations to operate in-place by default\n\nImplement arrayslices and views\n\n\nArraySlices use a numpy-like syntax for indexing\n\nViews wrap a standard rust slice (&[T]) of an array\n\n\n\nGPU support (this is most important!!!)\n\n\nHeadless OpenGL context with glfw Rust bindings (see https://crates.io/crates/gl-headless for reference)\n\nGPU computation\n\n\n\nAPI completion\n\nFor select operations, implement alternative methods that create a new NdArray with the _copy suffix e.g. matmul_copy()\n\nClean up examples to just 2 - one showing basic usage and indexing, and the other showing an applied example with an ODE solver\n\nWrite tests for library\n\nBenchmark library to ensure good performance and add elara array benchmarks\n\nMore helpful error messages (for good developer experience)\n\nImplement binary serialization\n\nOptimizations:\n\nGPU computation & keeping data on the GPU for as long as possible\nUsing a clone-on-write backing array (Cow) so that no clones will be done unless necessary\n\n","id":"https://elaraproject.github.io/elara-hub/elara-array-api-plan/","title":"Elara-array API"},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"body":"Implement several libraries on top of elara-gfx:\n\nelara-draw: Fabric.js-like library on top of elara-gfx, see http://fabricjs.com/fabric-intro-part-1\nelara-ui: UI library on top of elara-gfx\n\n","id":"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/","title":"Elara GFX continuing work plan"},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"body":"Elara Hub is meant to be a new open-source home of project elara. It uses a git repository for collaboration, and zola to generate the docs. When editing it is advised to use zola serve to live-preview as you write. Elara hub is meant to read like obsidian, with obsidian-style internal links. In the future, it will also include a file switcher via command palette like obsidian, and maybe a graph view.\nElara Hub supports an extended markdown syntax adapted for technical writing and project management. It includes:\n\nCSV headers\nTable of contents\nBasic text formatting\nLists\nLinks\nQuotes\nCode blocks & syntax highlight\nHorizontal rules\nFootnotes\nFormulas with KaTeX\nTask lists\nInternal linking\nDiagrams with mermaid.js (which includes Gantt charts)\nPlots with charter\nAdmonitions and notes (like MyST markdown)\nIcons\nVideo/audio\nFigures and captions\nAutomatic conversion of common characters (e.g. (c), --) to their respective unicode symbols\n\nFuture additions:\n\nAuthor support (a post can have many authors) - not sure how good of an idea this is, some pages like _index.md might have dozens of authors\nInclude the Open Sans font by default\n\nIn the future there will be a realtime collaborative editor that integrates with Elara Hub. The editor uses a CRDT that syncs everyone's edits. So on every startup, it loads the latest edit via CRDT (it doesn't store any files on the disk, only in memory, due to how the CRDT/server works). The user can then make their edits and those are automatically reflected on everyone's computer via the CRDT. At any point, users can submit a commit request, which basically freezes the state of the edits, checks out main in the Elara Hub repo to create a temporary staging branch, and commits the edits to the staging branch, as well as opening a pull request for that branch on github. Finally, a number of project-approved maintainers can merge that pull request or close it (depending on their judgement)\n","id":"https://elaraproject.github.io/elara-hub/elara-hub-creation/","title":"Elara Hub creation plan"},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"body":"The Vision\nProject Elära is a project to create a world worthy of human dignity through the spirit of collaboration and openness.\nWe gather people together to work on open research and open technologies that benefit everyone.\nWe want to inspire hope that we as individuals have the power together to do incredible things.\n\n\"Because the people who are crazy enough to think they can change the world, are the ones who do.\"\n\n6-month roadmaps\nThe project is planned broadly with 6-month roadmaps which dictate the priorities of the next 6 months.\n\nStarting 01/2024: [6-month roadmap 1]\n\nKey dates\n\n11/10/23 - first paper submitted, got lab approved\n12/10/23 - second paper completed\n\nProject directory\nThese are more in-depth pages about specific aspects of the project. Many of these pages are also hubs that cover one topic section and link to more detailed pages in that section.\n\n[Project Philosophy]\n[Project Elara libraries plan]\n[Elara apps plan]\n[Visualization-based outreach]\n[Things to add to Elara Handbook]\n[Project development stages]\n[Relativity Hub]\n[Focusing chamber theoretical analysis 1 (archive)]\n[Outreach plan]\n[Alternative method of solving differential equations]\n\nProject standards reference\nThese are common standards used within the project.\n\n[Standardized calculus notation]\n\nKnowledge base\nThese are guides to specific areas of knowledge important to the project\n\n[All about partial differential equations]\n[Multivariable calculus guide]\n[Integration techniques]\n\nIdea sketching\nThese are ideas of various project members that may (or may not) be incorporated into the project.\n\n[Hydrogen from CO2 production]\n[Speculative ideas for possible future extensions]\n\nOther\nMiscellaneous pages are linked here.\n\n[Meta (content about Elara Hub itself)]\n[Extra content storage]\n[Jokes & fun page]\n\n","id":"https://elaraproject.github.io/elara-hub/elara-hub-index/","title":"Elara Hub Index"},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"body":"(All times given on macos)\nOriginal time: 309s\nAfter integration with matrixmultiply crate:\nTime: 309s\nWithout println!() for loss:\nTime: 317s\nWith reduced clones\nTime: 277s\n\nUse libblas to implement basic operations\nFaster transpose implementation\nUse release mode\n\nFunctions to optimize:\n\nMatmul\nRelu \nSum\n\n\nImplement model saving to JSON, TOML and binary with nanoserde\nUnit tests for the library\n","id":"https://elaraproject.github.io/elara-hub/elara-math-optimization/","title":"Elara math optimization strategies"},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"body":"elara-ml API - so there are actually 3 APIs currently being compared. The first one is PyTorch-style:\nelara-ml API - so there are actually 3 APIs currently being compared. The first one is PyTorch-style:\npub struct MyModel {\n input_layer: Input,\n hidden_1: Dense,\n hidden_2: Dense,\n output_layer: Output\n}\n\nimpl MyModel {\n // x and y are here only for shape determination\n fn new(x: Tensor, y: Tensor) -> MyModel {\n // automatic shape determination by passing\n // another layer as first argument\n let input_layer = Input::new(x);\n let hidden_1 = Dense::new(input_layer, 16);\n let hidden_2 = Dense::new(hidden_1, 16);\n let output_layer = Output::new(hidden_2, y);\n \n MyModel {\n input_layer,\n hidden_1,\n hidden_2,\n output_layer\n }\n }\n}\n\nimpl Model for MyModel {\n // Models can only have one output, for\n // multi-input-output neural networks you\n // need to chain together multiple Models\n fn forward(x: Tensor) -> Tensor {\n // These absolutely don't need to\n // be in the same order as you declared\n // in new() (but probably should be so\n // that the auto shape determination works)\n let a = self.input_layer.forward(x);\n let b = self.hidden_1.forward(a);\n let c = self.hidden_2.forward(b);\n let d = self.output_layer.forward(c);\n d\n }\n}\n\nfn main() {\n let model = MyModel::new();\n model.compile(Optimizers::SGD);\n model.fit(&x, &y, 500, 0.00001, true);\n}\n\nThis API makes it easiest to use pre-made models, because you can simply import the model and compile it. However, it might be too much abstraction - it can be a little hard to see what the model is actually doing, especially with methods like compile() and fit() that no longer have a 1-1 correspondence with performing operations on tensors.\nThe second uses a macro Sequential! to imitate Keras's sequential API. This makes it easiest to learn, but again, abstracts away too much, which is not ideal, especially given how much debugging is done when making NNs.\nThe third is most barebones, and is the Jax-inspired API. It looks like this:\n// This is just a convenient way of\n// holding layers, there is nothing\n// special about this struct\nstruct Layers {\n pub input_layer: Input,\n pub hidden_1: Dense,\n pub hidden_2: Dense,\n pub output_layer: Output\n}\n\nimpl Layers {\n // x and y are here only for shape determination\n fn new(x: Tensor, y: Tensor) -> Layers {\n // automatic shape determination by passing\n // another layer as first argument\n let input_layer = Input::new(x);\n let hidden_1 = Dense::new(input_layer, 16);\n let hidden_2 = Dense::new(hidden_1, 16);\n let output_layer = Output::new(hidden_2, y);\n \n MyModel {\n input_layer,\n hidden_1,\n hidden_2,\n output_layer\n }\n }\n\n // Note: for zero_grad()\n // and update(), these can be\n // made less verbose by creating an\n // iter() method - see\n // https://stackoverflow.com/questions/30218886/how-to-implement-iterator-and-intoiterator-for-a-simple-struct\n fn zero_grad(&self) {\n self.input_layer.zero_grad();\n self.hidden_1.zero_grad();\n self.hidden_2.zero_grad();\n self.output_layer.zero_grad();\n }\n\n fn update(&self, lr: f64) {\n self.input_layer.update(lr);\n self.hidden_1.update(lr);\n self.hidden_2.update(lr);\n self.output_layer.update(lr);\n }\n\n fn save(&self) {\n let weights = NNSerializer::new(\"weights.bin\");\n // Add labels to weights; they will be referred\n // to by their labels when the weights are loaded\n weights.add(self.input_layer, \"input_layer\");\n weights.add(self.hidden_1, \"hidden_1\");\n weights.add(self.hidden_2, \"hidden_2\");\n weights.add(self.output_layer, \"output_layer\");\n weights.write();\n }\n}\n\nfn forward(layers: Layers, x: Tensor) -> Tensor {\n let a = layers.input_layer.forward(x);\n let b = layers.hidden_1.forward(a);\n let c = layers.hidden_2.forward(b);\n let d = layers.output_layer.forward(c);\n d\n}\n\nfn mean_squared_error(y: Tensor, y_pred: Tensor) -> Tensor {\n (&y_pred - &y).pow(2)\n}\n\nfn main() {\n // load x and y...\n let layers = Layers::new();\n let pbar = TrainingProgress::new(); // used to display progress bars\n\n // here we write our custom optimizer\n for i in 0..1000 {\n let preds = forward(layers, x);\n // preds and loss are both tensors, so they\n // can work with all the standard tensor methods,\n // including output to graphviz files!\n let loss = mean_squared_error(y, preds);\n pbar.update(i, &loss); // shows latest progress\n let lr = 1.0 - 0.9*i/100.0\n loss.backward();\n layers.update(lr);\n layers.zero_grad();\n }\n}\n\nThis approach has just the right amount of abstraction, and is very flexible, because it allows defining custom forward passes (with the ability to do multiple inputs or multiple outputs), custom loss functions, and custom optimizers. Furthermore, this API can easily interoperate with the PyTorch-style API. So this will be the API that is primarily focused on.\n","id":"https://elaraproject.github.io/elara-hub/elara-ml-api/","title":"Elara ML API proposal"},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"body":"Original reference: https://properphysics.wordpress.com/2014/08/02/christoffel-symbols-and-the-geodesic-equation-the-easy-way/comment-page-1/\nAssume we want to evaluate the Christoffel symbols for the metric:\n$$\nds^2 = dr^2 + r^2 d \\theta^2 + r^2 \\sin^2 \\theta d\\phi^2\n$$\nTo do this, recall that the Lagrangian of a particle moving along a certain geodesic is given by:\n$$\n\\mathcal{L} = g_{\\mu \\nu} \\frac{dx^\\mu}{d\\lambda} \\frac{dx^\\nu}{d\\lambda}\n$$\n(Yes, it's supposed to have a square root, but since the Lagrangian is a constant of motion you can square it and get the same result)\nRecall also that the line element is given by:\n$$\nds^2 = g_{\\mu \\nu} dx^\\mu dx^\\nu\n$$\nSo the Lagrangian of a free particle can simply be written:\n$$\n\\mathcal{L} = \\frac{d}{d\\lambda} (ds^2)\n$$\nWe can replace the derivative to an affine parameter to one with respect to (proper) time for practical purposes. Doing this, we find the Lagrangian for the spherical metric is:\n$$\n\\mathcal{L} = \\dot r^2 + r^2 \\dot \\theta^2 + r^2 \\sin^2 \\theta \\dot \\phi^2\n$$\nWe can then plug this Lagrangian into the Euler-Lagrange equations:\n$$\n\\frac{d}{d\\lambda} \\frac{\\partial \\mathcal{L}}{\\partial \\dot x} = \\frac{\\partial \\mathcal{L}}{\\partial x}\n$$\nto get (one equation each for $r$, $\\theta$ and $\\phi$). Note here that we assume each coordinate is a function of the other coordinates, that is $r = r(\\theta, \\phi), \\theta = \\theta(r, \\phi), \\phi = \\phi(r, \\theta)$, so chain rule/implicit differentiation is necessary. Doing all the steps, and without simplifying, the result is:\n$$\n2 \\ddot r = 2r \\dot \\theta^2 + 2r \\sin^2 \\theta \\dot \\phi^2\n$$\n$$\n2r^2 \\ddot \\theta = 2r \\frac{dr}{d\\theta} \\dot \\theta^2 +2r^2 \\sin \\theta \\cos \\theta \\dot \\phi^2\n$$\n$$\n2 r^2 \\sin^2 \\theta \\ddot \\phi = 2r \\sin^2 \\theta \\frac{dr}{d\\phi} \\dot \\phi^2 +2r^2 \\sin \\theta \\cos \\theta \\frac{d\\theta}{d\\phi} \\dot \\phi^2\n$$\nWe can do a simplification here - note that:\n$$\n\\frac{dr}{d\\theta} \\dot \\theta^2 = \\frac{dr}{d\\theta} \\frac{d\\theta}{d\\tau}\\frac{d\\theta}{d\\tau} = \\dot r \\dot \\theta \n$$\nSimilarly:\n$$\n\\frac{d\\theta}{d\\phi} \\dot \\phi^2 = \\frac{d\\theta}{d\\phi} \\frac{d\\phi}{d\\tau} \\frac{d\\phi}{d\\tau} = \\dot \\theta \\dot \\phi\n$$\nAnd the same is true for $\\frac{dr}{d\\phi} \\dot \\theta^2$. So if we use these simplifications and also cancel out common factors, the geodesic equations are:\n$$\n\\ddot r = r \\dot \\theta^2 + r \\sin^2 \\theta \\dot \\phi^2\n$$\n$$\n\\ddot \\theta = \\frac{1}{r} \\dot r \\dot \\theta + \\sin \\theta \\cos \\theta \\dot \\phi^2\n$$\n$$\n\\ddot \\phi = \\frac{1}{r} \\dot r \\dot \\phi + \\cot \\theta \\dot \\theta \\dot \\phi\n$$\nIf you wanted to find the geodesic equations - tada! You've already got them. If you want to find the Christoffel symbols though, that's just one additional step - just read them off the geodesic equations. For example, the first geodesic equation (if we simplify it) is:\n$$\n\\ddot r = r \\dot \\theta^2 + r \\sin^2 \\theta \\dot \\phi^2\n$$\nCompare this to:\n$$\n\\ddot x^i = -\\Gamma^i_{jk} \\dot x^j \\dot x^k\n$$\nNote that we have an implicit sum going over the indices $j$ and $k$ here due to the Einstein summation convention. So really, this expands out to:\n$$\n\\ddot r = \\ddot x^i = -\\sum_{i = 0}^n \\sum_{j = 0}^n \\Gamma^i_{jk} \\dot x^j \\dot x^k\n$$\nSo $\\Gamma^r_{\\theta \\theta} = -r$, $\\Gamma^r_{\\phi \\phi} = -r\\sin^2 \\theta$ from the first geodesic equation, $\\Gamma^\\theta_{r \\theta} = \\frac{1}{r}$, $\\Gamma^\\theta_{\\phi \\phi} = -\\sin \\theta \\cos \\theta$ from the second, and $\\Gamma^\\phi_{r \\phi} = \\frac{1}{r}$, $\\Gamma^\\phi_{\\theta \\phi} = \\cot \\theta$ from the third.\n","id":"https://elaraproject.github.io/elara-hub/eval-christoffels/","title":"Quickly evaluating the Christoffel symbols"},"https://elaraproject.github.io/elara-hub/extra/":{"body":"This is a place for extra content to be temporarily placed until they find a good location.\n\nQuick notes\nFor the elara handbook images - use this template:\n{image} ../images/raster/fbd-gravity.png\n:alt: Free body diagram single force\n:width: 400px\n:align: center\n\nElara UI/UX guidelines: high accessibility, visual comfort, and clarity are the main priorities.\nProject Elara research papers should use literate programming to ensure reproducible research, like org-mode. They should be written in a specialized markdown syntax with support for executable code blocks (like MyST markdown), which is then compiled to LaTeX and HTML (with the Elara academic theme). Design the Elara academic theme in Figma.\nMaybe eventually add a command palette/fileswitcher to Elara Hub, and add a Obsidian-style graph view like this.\nImplement responsivity to elara-ui by setting breakpoint functions in Component trait.\nFor Elara UI also create pure CPU-based backend that uses a Rust-ported version of fenster. Users can choose which backend they want: \n\nGPU backend is faster and leads to smoother UI rendering but uses a lot of battery and can be glitchy if graphics drivers aren't working correctly, and may not be compatible with very old devices\nFor low-powered devices CPU rendering is better, but it is much slower\n\nFor Elara array first optimize the CPU version as much as possible. E.g. the arithmetic operations should return a view rather than a completely new array, or use clone-on-write. The CPU backend should always be available, even if the GPU backend is faster.\n","id":"https://elaraproject.github.io/elara-hub/extra/","title":"Extra content"},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"body":"Note: we've actually realized that this is all completely wrong. The math is correct, the physics isn't. So this is just for archival purposes.\n\nConsider a beam of light that makes an angle $\\theta$ with the horizontal. Consider that beam hitting a sloped wall with an angle of declination of $\\phi$. Due to Snell's law, the angle the incoming light beam makes with the wall normal is the same as the angle the outgoing light beam makes with the wall normal:\n\nWe aim to solve for $\\beta$, which is the angle made by the next light beam with the horizontal. To do so, however, we must first calculate the other angles, using the simple geometric fact that $\\angle a + \\angle b + \\angle c = \\pi$. First, we calculate $\\gamma$:\n$$\n\\left(\\frac{\\pi}{2} - \\theta \\right) + \\gamma + \\left(\\frac{\\pi}{2} - \\phi \\right) = \\pi\n$$\n$$\n\\gamma = \\theta + \\phi\n$$\nThen, we calculate $\\alpha$:\n$$\n\\alpha = \\frac{\\pi}{2} - \\gamma\n$$\nThen, we calculate $\\omega$:\n$$\n\\omega + \\theta + \\alpha = \\pi\n$$\n$$\n\\omega = \\frac{\\pi}{2} + \\phi\n$$\nFinally, we can calculate $\\beta$:\n$$\n\\beta + \\alpha + (\\pi - \\omega) = \\pi\n$$\n$$\n\\beta = \\theta + 2\\phi\n$$\nWe can now say that $\\beta = \\theta_{i + 1}$, as it would be the value of $\\theta$ for the next bounce, and the whole setup would repeat. From there, we obtain the equation:\n$$\n\\theta_{i + 1} = \\theta_i + 2\\phi_i\n$$\nHowever, this equation continually increases, whereas what we want is for $\\theta_n = 0$ as we want planar waves. Thus, we add a small correction:\n$$\n\\theta_{i + 1} = \\theta_i + 2\\phi_i\n$$\n$$\n\\phi_{i + 1} = \\phi_i - i \\epsilon\n$$\nwhere $\\epsilon$ is a suitably small angle. Using this, we find that the resulting curve of $\\phi(x)$ is a curve whose derivative is a straight line, and therefore:\n$$\nf(x) = ax^2\n$$\nUsing $f(10) = 6$ obtained from the equation, we solve for the value $a = \\frac{50}{3}$. Therefore, the mathematically ideal surface is a surface of revolution about the x-axis of the curve:\n$$\nf(x) = \\frac{3}{50} x^2\n$$\n\n","id":"https://elaraproject.github.io/elara-hub/focusing-chamber-1/","title":"Focusing chamber theoretical analysis 1"},"https://elaraproject.github.io/elara-hub/funny/":{"body":"\"Our weird bell thing\" - our new official name for the focusing chamber\n","id":"https://elaraproject.github.io/elara-hub/funny/","title":"Project humour and jokes"},"https://elaraproject.github.io/elara-hub/future-extensions/":{"body":"The following includes a number of ideas that may make their way into the project at some point in the future.\nSpaceplanes\nA new way to create SSTO-like transport spaceplanes:\n\nLift becomes insufficient ~30km into atmosphere\nSo we will design a jet (turbofan) engine that will transition to a ramjet, and then turn off at 30km, and rely on external rocket boosters the rest of the way\n\nA modified version of the aircraft can be launched from an electromagnetic catapult and does not need the turbofan; it can just use its ramjet\n\n\nThe external rocket boosters then detach (for this concept design they are non-reusable, but they are relatively cheap and inexpensive because they don't need to be as big as a typical rocket given they are given a head start by the jet engine)\nIf the spaceplane is configured for suborbital mode, then its payload (with attached third stage) is released at this point; if the spaceplane is configured for pure orbital mode (such as docking with ISS or an interplanetary spacecraft in orbit), then its rocket boosters burn for a little while longer\nUpon re-entry the SSTO would slow down in the upper atmosphere, then glide, then finally at ~5-10km altitude it turns its jet engine back on to fly to its runway\n\nWhy do this? It integrates the best things about both SSTOs and conventional rockets:\n\nAbility to operate from runways rather than extremely complex rocket launch pads\nTheoretically safer than conventional rocket (given it takes off like a normal jet) and cheaper than (non-reusable) rockets\nIsn't as limited by payload constraints of SSTOs because it uses lift and efficient jet engines to gain speed at low altitudes, then uses expendable rockets for the second stage - in fact it should be able to carry more payload than a comparable 2-stage rocket given the boosting effect of the jet engine at low altitudes, allowing the second stage expendable boosters to be smaller\nIt works well with economies of scale, which is the best way to achieve inexpensive spaceflight\n\nElara-powered vertical farms\nVertical farms that use hydroponics for massively increased food growth efficiency, to feed the world.\nElara-powered water splitting\n\nProject elara - using photosynthetic water splitting into H2 and O2 to make rocket fuel (LH2 and LOX)\nIdea: ion engines powered by hydrogen fuel cells are used for second-generation elara arrays\nIdea: project elara can store a lot of energy for peak demand times by using electrolysis to split water into hydrogen gas which can be then burned to generate electricity via steam turbines and generators (fuel cells work too but are less efficient) and the resulting water vapour collected and condensed during peak demand\n\nFuel-efficient airplanes\nThese are blended wing bodies with very very high lift-to-drag ratios (up to 600:1). So they can quickly take off to a high altitude (with high-thrust engines), then turn off their engines and just glide to their destination. This allows them to take advantage of jet streams in Earth's upper atmosphere and use minimal fuel.\nMass driver propulsion\nThe idea is to have two mass drivers that accelerate solid spherical fuel pellets so fast that when they hit each other the pellets vaporize. The mass drivers would be powered by nuclear reactors.\nOberth effect launches\nFor interplanetary missions in project elara, the standard practice is to let a spacecraft perform a powered fall into a gravity well to gain speed.\n$$\nK = \\frac{1}{2} mv^2\n$$\n$$\n\\frac{dK}{dt} = mv \\frac{dv}{dt} = mav = F v\n$$\n$$\nV = \\Delta v \\sqrt{1 + \\frac{2v_{esc}}{\\Delta v}}\n$$\nThus with a delta-v of 100 km/s as can be accomplished with very long firings of an ion engine, then you can get to as much as 360 km/s. That being said, the ion engine would need to be fired for decades to get to actually get to 100 km/s from rest. Thus, conventional chemical engines with a high enough delta-v would work as well, as would a nuclear thermal engine (which should be able to run for much longer and thus have a high delta-v)\nMagsail in interstellar medium\nBlack hole reactor\nNon rotating black hole - Dyson array around it to extract mass-energy of accretion disk - can extract 6% mass energy. Method of simulating this would be to conduct an N-body simulation of millions of particles distributed randomly within a defined accretion disk with my geodesic integrator and finding the average particle flux around a Gaussian surface around the BH. Then use the flux distribution to find the optimal placement and geometry of the black hole mirror array.\nPlan for black hole spacecraft: it will be a photonic rocket powered by a black hole reactor. The black hole reactor uses a microscopic rotating black hole to which a tiny but constant stream of fuel is supplied. A dyson sphere envelops the black hole (which also serves as a magnetic cage). The black hole converts up to 29% of the mass-energy of the fuel to energy - that means 1 kg of fuel would be able to release $9 \\times 10^{16}$ Joules of energy - which can then be used to power a conventional thermal rocket or mass driver for spacecraft propulsion.\nDerivation: the maximum energy that can be extracted from a rotational black hole is given by:\n$$\nE_{max} = Mc^2 \\left[1 - \\frac{1}{\\sqrt{2}}\\left(1 + \\sqrt{1 - \\frac{a^2}{M^2}}\\right)^{1/2}\\right]\n$$\nThe total energy efficiency is given by:\n$$\n\\lim_{a \\to 1} \\frac{E_{max}}{Mc^2} \\approx 0.29\n$$\nSSTOs\nIdea is for spaceplane with detachable rocket boosters. The spaceplane uses a ramjet up to about 20km of altitude, then shuts off its ramjet and uses its rocket boosters to quickly and rapidly gain thrust before the boosters detach and fall back to earth (they land with parachutes and big airbags, like pathfinder). This allows its main rocket engine and thrusters to be fairly small.\nHigh thrust, high delta-v propulsion\nHigh thrust, high delta-v rockets are rockets that both produce enough thrust and can run for a long time, from months to years on end. This excludes chemical rockets (which cannot run for long) and electrical propulsion (which produces too little thrust). The ones primarily investigated are:\n\nMass driver propulsion\nThermal rocket\nAntimatter rocket\nPlasma/other magnetohydrodynamic rocket\n\nNote: of interest also is interstellar magsail designs\nMethods to reduce nuclear waste\n\nFission-catalyzed fusion\nArtificial nuclear transmutation\n\n","id":"https://elaraproject.github.io/elara-hub/future-extensions/","title":"Speculative future extensions"},"https://elaraproject.github.io/elara-hub/geometrized/":{"body":"Refer to the following table for conversions from the SI system of units to the geometrized unit system. To convert an SI unit to the geometrized unit, multiply the SI value by the first column; to convert a geometrized unit to an SI unit, multiply the geometrized value by the second column.\nMeasure of...SI to geometrizedGeometrized to SI\nLength ($L$)$\\frac{c^2}{G}$$\\frac{G}{c^2}$\nTime ($T$)$\\frac{1}{c}$$c$\nMass ($M$)1 (same value in SI and geometrized)1 (same value in SI and geometrized)\n\nAll other measurements can be built out of these base units for length, time, and mass. For example, force has the dimension $M LT^{-2}$ , so SI to geometrized would be multiplying by $\\frac{c^2}{G}c^2=\\frac{c^4}{G}$, and geometrized to SI would be multiplying by $\\frac{G}{c^4}$.\n","id":"https://elaraproject.github.io/elara-hub/geometrized/","title":"Geometrized units"},"https://elaraproject.github.io/elara-hub/h2-co2/":{"body":"$$\n6CO_2 + 6 H_2 O \\Rightarrow C_6 H_{12} O_6 + 6 O_2\n$$\n$$\nC_6 H_{12} O_6 \\Rightarrow 6H_2 + 6C + 3O_2\n$$\nThe idea is that solid carbon can then be stored, hydrogen gas can be used for fuel cells. And in giant vertical towers full of organisms that do this reaction, mass carbon sequestration could be accomplished.\nhttps://www.ncbi.nlm.nih.gov/pmc/articles/PMC9915242/\n","id":"https://elaraproject.github.io/elara-hub/h2-co2/","title":"Hydrogen from CO2 production"},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"body":"General\nFor the first page, change \"learn, develop, or contribute to Project Elara\" to \"learn to develop or contribute to Project Elara\", that wording would be clearer.\nFor knowledge library\n$W = \\Delta K = -\\Delta U$\nDistance is denoted $S$, and speed is denoted $|v|$.\n\"Calculus is the study of the infinitely large and infinitely small. We use limits to tame infinity so it can be reasoned with.\"\nIn elara handbook's neural network chapter, mention how you can use first or second-order Newton-Raphson method to minimize loss function of neural network, basically solving the equation $\\nabla L = 0$.\nLine integral is like \"weighted arc length\". The \"weights\" are the value of the (vector or scalar-valued) function at each point along the curve.\nInterpretation of parametric arc length - you are taking the speed (norm of the vector-valued velocity function) and integrating it over the enter length of the curve.\nAdd a mechanics section to GR (General Relativity, Part 4 in the Handbook) - it should have things like the GR version of 4-force, GR version of 4-momentum, GR version of Lorentz force law with Faraday tensor, etc. E.g. force in General Relativity is defined with:\n$$\nF^\\lambda = \\frac{dP^\\lambda}{d\\tau} + \\Gamma^\\lambda_{\\mu \\nu} U^\\mu P^\\nu\n$$\nBecause otherwise GR seems like just a theory of gravity. Which it is, but really it's a complete reformulation of classical mechanics in curved spacetime. That is - it (can technically) describe everything from electromagnetism to fluid dynamics to kinematics, it's just not usually taught that way.\nNice page with physics-motivated calculus problems: https://math24.net/optimization-problems-physics.html and https://math24.net/newtons-second-law-motion.html\nAdd to Elara handbook differential equations section: everything from https://math24.net/topics-differential-equations.html\n[All about partial differential equations] should be added to diffeq section (for the analytical parts) and developer hub (for the numerical/simulation parts)\nIn an analogy to gravity, the field corresponds to the gravitational force pulling an object onto the Earth, while the potential corresponds to the shape of the landscape on which it stands.\nA differential equation defines something by how it changes.\nHorner's method\nhttps://math.stackexchange.com/questions/1356981/why-does-the-separation-of-variables-method-for-des-work\nFor ecosystem\nEstablish the Betancourt Doctrine - project elara will neither recognize nor establish relationships with governments, organizations or groups that have committed, or aim to commit human rights abuses, derive their authority from non-democratic means, or commit gross abuses of power\nFor developer hub\nProject elara will do open-source hardware like this: https://sr.ht/~jacqueline/tangara/. The open-source hardware will be part of developer hub.\nProject Elara development guidelines:\n\nSimple - using minimal abstraction, minimal dependencies, and implementing a minimalist set of features - this is to aid in maintenance and code preservation over centuries\nFast - high performance, low resource usage, able to run on even low-performance devices\nRobust - well-engineered and able to handle edge-cases and errors and still provide correct behavior\n\nEach verified project elara app or library will be explained in great detail in the Handbook - the implementations are all explained well enough, and enough code examples are given, that someone could conceivably rewrite the code from scratch following the explanations. This is also why they have to be fairly small codebases.\n","id":"https://elaraproject.github.io/elara-hub/handbook-addthings/","title":"Things to add to Elara Handbook"},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"body":"Many physics problems encountered in Project Elara require the use of integration to solve. These are some common techniques for integration:\n\nElementary integrals (which are just the derivative rules in reverse)\nU-substitution\nIntegration by parts\n\nExhaustive integration by parts (DI method)\nIntegration by parts cancellation trick\n\n\nSymmetries: if $f$ is an odd function, then:\n\n$$\n\\int_{-a}^a f(x) dx = 0\n$$\n\nMultiplying by conjugate:\n\n$$\n\\int \\frac{1}{1 + \\cos x} dx\n$$\n$$\n\\int \\frac{1}{1 + \\cos x} \\frac{1 - \\cos x}{1 - \\cos x} dx\n$$\n$$\n\\int \\frac{1 - \\cos x}{1 - \\cos^2 x} dx\n$$\n$$\n\\int \\frac{1 - \\cos x}{\\sin^2 x} dx\n$$\n$$\n\\int \\csc^2 x dx - \\int \\frac{\\cos x}{\\sin^2 x} dx\n$$\nFor first integral - notice that this is just equal to $-\\cot x + C$.\nFor the second integral - let $u = \\sin x$, then:\n$$\n\\int \\frac{\\cos x}{\\sin^2 x} dx = \\int \\frac{1}{u^2} du = -\\frac{1}{u} + C\n$$\nSo the solution is:\n$$\n-\\cot x + \\csc x + C\n$$\n\nUsing trig identities (particularly Pythagorean ones) - e.g.\n\n$$\n\\int \\sin^2 x dx = \\int \\frac{1 - \\cos (2x)}{2}dx = \\frac{1}{2} x - \\frac{1}{4} \\cos (2x) + C\n$$\n\nIntegration by partial fractions\nLong division of integrand\nExpanding the integrand - e.g.\n\n$$\n\\int (1 + x^2)^2 dx = \\int 1+ 2x^2 + x^4 dx = x + \\frac{2}{3} x^3 + \\frac{1}{5} x^5 + C\n$$\n\nCancelling out common factors\nDividing out - e.g.\n\n$$\n\\int \\frac{1}{\\sqrt{16 - 81x^2}} dx = \\int \\frac{1}{\\sqrt{16(1 - (81x^2 / 16))}} = \\int \\frac{1}{4\\sqrt{1 - (9x/4)^2}}\n$$\n\nCompleting the square\nSplitting one integral into multiple simpler integrals (fraction-splitting)\n\nFor fractions:\n$$\n\\int \\frac{1 + x}{x^2} dx = \\int \\frac{1}{x^2} dx + \\int \\frac{1}{x} dx = -\\frac{1}{x} + \\ln |x| + C\n$$\n\nTrig sub\nIntegration via geometry (especially for circles, rectangles, and triangles)\nFeynmann integration trick (only for definite integrals)\n\n","id":"https://elaraproject.github.io/elara-hub/integration-techniques/","title":"Integration techniques"},"https://elaraproject.github.io/elara-hub/library-plans/":{"body":"All libraries\n\nImplement custom error types (this is already being implemented in elara-gfx pretty well) following https://mmapped.blog/posts/12-rust-error-handling.html - the correct approach is small enums of error categories rather than one humongous global error enum\nMove to Codeberg for hosting in the future and keep github as mirrors\nAll libraries that currently depend on elara-log should be able to make elara-log an optional dependency behind the logging feature flag. If disabled, they will simply use println! instead.\n\nelara-astro\nhttps://crates.io/crates/nyx-space\nelara-md\nelaramd is a self-contained markdown to PDF converter for project elara. This converter skips the HTML generation step and directly takes markdown (with embedded LaTeX equations) and converts it to a styled PDF in the Elara Project style. This converter should include some common themes - academic (research paper), article, technical, etc. so that future project elara papers can be written in pure markdown instead of needing to be written in LaTeX.\nelara-presenter\nIdeal presentation tool for project elara - takahashi method, write slides in markdown, the tool allows presenting the slides, like sent from suckless or https://ia.net/presenter. The tool should include markup for:\n\nText slides\n\nHeading-only slides\nText-only slides\nLabel and text slide (image is 100% height and text takes up remaining room)\n\n\nWhole page images\nCode slides\nKaTeX math slides\nGood design for the slide themes\n\nelara-ui\nElara UI offers three different APIs:\n\nThe widget API provides ready-to-use, styled widgets following Elara design conventions. However, widgets are not customizable\nThe component API provides basic building blocks of UIs that can then be joined together. They are flexible while not being overly verbose.\nThe draw API allows painting custom widgets. It is the lowest-level API.\n\nElara UI requirements:\n\nImplementation of the entire Elara UI design system\nGood performance, low footprint (but it does not have to be aggressively optimized)\nSimple to use and easy to maintain\nBattle-tested: to prove this, several apps meant for production use will be written in Elara UI to test its functionality (see the demo apps below)\n\nThe single biggest inspiration for Elara UI's API is Gtk.\nFor Elara UI apps, the primary architecture will be a core-frontend approach. The functionality of the app will reside in the core, essentially library that contains all app functions. This allows the app to be run from the terminal, as well as controlled by scripting. The core should be able to do everything the app needs to do. Meanwhile, the frontend will communicate with the core and present the interface that the user will use to control the app. However, the frontend has no functionality of its own; all the functionality is in the core, which the frontend merely provides an interface to.\nTo integrate with this architecture, Elara UI is a retained-mode UI library, and uses the simplest API imaginable:\n// 1. Create UI\nlet mut ui = UI::new(1600, 1200);\n\n// 2. Create layouts\nlet mut left_sidebar = Layout::default();\n\n// 3. Add elements with widgets API (easier) or \n// components API (more control) to layout\nlet mut sidebar_label = Label::new(\"Sidebar\");\nlet mut sidebar_list = List::from(\"Item {}\", 0..5);\n\n// 4. Add callbacks to widgets to make them interactive\n// widgets can be bound to a state so that their appearance\n// is linked to that state\nsidebar_list.on(move |event| {\n match event {\n Event::Click => {\n ui.close();\n },\n _ => (),\n }\n})\n\n// 5. Add components to layout, and add layout to UI\nleft_sidebar.add_element(sidebar_label);\nleft_sidebar.add_element(sidebar_list);\nui.add_element(left_sidebar);\n\nTesting demo apps:\n\nMake an analogue of https://sindresorhus.com/plain-text-editor\nMake a gui version of https://pypi.org/project/share-file-qr/\nMake a previewer/slide shower based on https://en.wikipedia.org/wiki/Takahashi_method like sent from the suckless project\nMake a basic demo terminal based on https://github.com/dhanoosu/TkTerm\n\nFollow tips from https://2d.graphics/\nTips for fast GPU rendering:\n\nOnly render on user input/interaction, otherwise don't re-render frames (no immediate-mode UI that re-renders every frame)\nOnly re-render changed areas (\"damage tracking\")\n\nThis requires caching the last render to a texture in memory and loading that texture on next frame, cropping out the region that was changed\n\n\nMust render on GPU\nFor repeated elements (e.g. long lists or tree views) caching is necessary\n\ndesign stuff:\nFor elaraui components - implement all the components that egui has in its demo\nCool apps to maybe port one day to elara-ui as demo applications:\n\nhttps://github.com/FPurchess/blank\nhttps://github.com/adileo/squirreldisk\nhttps://github.com/spacedriveapp/spacedrive\nhttps://github.com/kkoomen/pointless\n\nelara-math\nImplement the following:\n\nAdam optimizer\n\nCurrent progress: see [Elara math optimization plan]\nElara-math will use elara-array for implementation of n-dimensional arrays, however everything else (e.g. diff eq solvers, FFT, special functions, quadrature, etc.) is custom-implemented.\nIn the future, do a \"blank rewrite\" - rewriting the entire library without looking at any reference github source code. Doing this often will help improve the code quality.\nAutodiff implementations to look at:\n\nhttps://github.com/ziap/autodiff/\nhttps://github.com/matiasbattocchia/simple-grad\nhttps://github.com/conradludgate/autograd-rs/tree/main\n(Nearly 1-1 reimplementation of Jax in Rust) https://getcode.substack.com/p/beyond-backpropagation-higher-order\n\nIn the future elara-math should have a second functional API like Jax's that will be the primary API. This functional API has a elara_math::grad()function that transforms one function into a corresponding function for its derivative. Base this on how https://github.com/HIPS/autograd implements it. This is bc the current PyTorch-inspired API is basically only good for neural networks and wastes computational time creating graphs. One similar rust implementation to reference is https://github.com/ibab/rust-ad/blob/master/src/lib.rs.\nImplement sparse matrices: https://crates.io/crates/sprs\n\n\nAlso add a numerical quadrature feature to elara-math to compute integrals:\n\nImplement simpson's rule and Gauss-Konrod rule based on https://github.com/esa/torchquad for 1D case, Monte-Carlo integration for N-D case, as well as Trapezoidal and Romberg quadrature for integrating over discrete arrays\n\nAdd automatic integration - this is like automatic differentiation, only it takes a function and integrates its nth Taylor polynomial (which can be found exactly) - since unlike typical numerical integration it can be done to machine precision and thus doesn't suffer from numerical precision errors, it could be far more precise\n\nhttps://crates.io/crates/quad-rs/0.1.2\nAlso learn matrix calculus for elara-math from https://www.lesswrong.com/s/nMGrhBYXWjPhZoyNL/p/9L9XuXhLYBm47yYkf\nAlso eventually create a tensor algebra system like cadabra: https://cadabra.science/\nAlso add a monte-carlo solver for ODEs: https://jotterbach.github.io/content/posts/mc_ode/2018-08-08-MonteCarloODE/\nelara-ml\nNote: Elara ML is responsible for implementing the higher-level constructs for efficient machine learning (e.g. dense layers, convolution layers, model architectures, pretrained models, etc.) while Elara Math handles the underlying computations.\nSee [Elara ML API proposal]\nhttps://github.com/utility-code/tinyDL\nelara-gfx\nSee [Elara GFX continuing work]\nFixes:\n\n\nFix the issue of the text rendering coordinates\n\nUnified coordinate system for all primitives\n\nFeatures:\n\n\nPreliminary UI rendering\n\nSave OpenGL rendering to image file for headless rendering (see this)\n\nFor a demo of both elara-array and elara-gfx - port the following pathtracers to Rust using only the project elara libraries:\n\n\nhttps://github.com/li-plus/tinypt\n\nhttp://www.kevinbeason.com/smallpt/\n\nhttps://github.com/vkoskiv/c-ray\n\nThe raytracing series\n\n\n\nLook at https://lodev.org/lodepng/ and port the 500-line picoPNG into a Rust version for elara-gfx.\nImplement several libraries on top of elara-gfx:\n\nelara-vg: Fabric.js/Paper.js-like vector graphics library on top of elara-gfx, see http://fabricjs.com/fabric-intro-part-1, basically it implements the vector graphics parsing and processing and vector graphics operations, but it leaves all the rendering to elara-gfx, which allows it to render to any platform elara-gfx supports (basically all the platforms)\nelara-ui: minimal UI library on top of elara-gfx used for all the Elara apps, again thanks to the library it supports all the platforms elara-gfx supports (further details below)\n\nhttps://zed.dev/blog/videogame\nelara-gfx is meant to not include mathematical operations. However, for certain operations that do require handling arrays, elara-gfx will have a micro-implementation of basic math using purely functional programming. That means function signatures will look like this:\n// Takes in matrix a of dims (M x N) and matrix b of dims (N x K)\n// and write the result to matrix c\nfn matmul(a: &[f64], b: &[f64], m: usize, n: usize, k: usize, c: &mut [f64]);\n\nelara-gfx should have three main APIs:\n\nGfxRenderer, which is common graphics rendering layer like SDL (just with the ability to render both on the CPU and the GPU)\nGPUCompute, which is an OpenGL wrapper for GPU computations (like CUDA)\nPlatform, a very low-level API to do things like window creation, event listening, etc.\n\nCrucially elara-gfx should not implement any math functions. That is what elara-math and elara-array does.\nThe GfxRenderer layer is able to draw basically anything graphics-related: \n\nLines\nPrimitives\n\nRectangles\nCircles\nTriangles\n\n\nText\nImages\nAny 2D curve given a set of vertices\nAny 2D shape given a set of vertices (which means e.g. if you want to draw a bezier curve, you need to write your algorithm to convert it to an array of vertices)\n(Future) any 3D object given a set of vertices using shaders (the shaders are Rust closures that take in a 32-bit vertex data and fragment data array as input and output another 32-bit raster array)\n\nThis means that to use elara-gfx is as simple as declaring:\nuse elara_gfx::{GfxRenderer, RenderBackend};\n\nfn main() {\n // use the cross-platform CPU backend\n // the backend is kind of like https://zserge.com/posts/fenster/\n let ctx = GfxRenderer::create_ctx(RenderBackend::CPU);\n ctx.draw(...);\n\n // use the cross-platform OpenGL backend\n let ctx = GfxRenderer::create_ctx(RenderBackend::OpenGL);\n ctx.draw(...);\n\n // use the Apple-only Metal backend\n let ctx = GfxRenderer::create_ctx(RenderBackend::Metal);\n ctx.draw(...);\n\n // use the cross-platform Image backend\n // this is most suitable to rendering to an image like a PNG\n let ctx = GfxRenderer::create_ctx(RenderBackend::Image);\n ctx.draw(...);\n}\n\nElara GFX should eventually be zero-dependency (other than elara-log, but even that should be an optional feature flag), like space-shooter.c/tigr. This is a very long-term thing.\nTo implement this, I can make a simplified port of tigr to C with just the OpenGL parts, and then port it to Rust for a zero-dependency GL/platforming library. This is in line with the long-term goal of making the entire Elara Project zero-dependency.\nelara-array\nMore details in [Elara-array API plan]\nelara-array should include its GPU backend as an optional feature. This speeds up compile times - because if it doesn't use the GPU backend, it has basically zero dependencies.\nImplement the following:\n\n\nWorking differential equations solvers\n\nWorking pretty-print for NdArrays\n\nWorking 1D pretty print\n\nPython bindings (referencing tinynumpy for the code)\n\nNanoserde serialization to JSON for NumPy bridge\n\nTests for the library\n\nReplace ndarray-rand with nanorand\n\nelara-plot\nCan plot 2D real and complex-valued functions, 3D functions, and 4D functions, as well as their field equivalents.\nCan also plot parametric lines and parametric surfaces, as well as vector-valued functions and vector fields\nVisualizing 4D functions $f(\\mathbb{R}^3) \\to \\mathbb{R}^4$: assign a color to each point in 3D space (density plots), such as:\n\nhttps://www.math.brown.edu/tbanchof/multivarcalc2/multivarcalc3-1.html\nhttp://www.falstad.com/qmatom/\n\n","id":"https://elaraproject.github.io/elara-hub/library-plans/","title":"Project Elara library plans"},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"body":"The Elara Hub uses a special formatting language to generate its website. This formatting language is called Elara markdown, and is a dialect of markdown. Like markdown files, they end with the .md extension. An overview of the syntax is given below.\nBasic syntax\nInline text formatting is accomplished with _italics_ (or *this italic format*) and **bold**. You can creating headings using # symbols - H2 is ##, H3 is ###, and so on. Note that on Elara Hub we don't use H1's because that is reserved for title text, and the title is auto-generated on build. Horizontal dividers are created with three dashes - that is, ---.\n","id":"https://elaraproject.github.io/elara-hub/markdown-guide/","title":"Elara markdown guide"},"https://elaraproject.github.io/elara-hub/menu/":{"body":"","id":"https://elaraproject.github.io/elara-hub/menu/","title":"Menu (for mobile)"},"https://elaraproject.github.io/elara-hub/meta/":{"body":"It may be a good idea to make the [Elara libraries plan] a hub page with individual links to pages for each of the libraries.\n\n\nUnfortunately the code blocks have a ridiculous amount of indent by default. So we have to use spaces, not tabs.\n\n","id":"https://elaraproject.github.io/elara-hub/meta/","title":"Elara Hub Meta"},"https://elaraproject.github.io/elara-hub/multivar/":{"body":"Partial derivatives\nPartial derivatives differentiate only to the given variable while holding all other variables constant. They can be noted with $\\frac{\\partial f}{\\partial x}$ or $f_x$. The formal definition of the partial derivative in 2D is:\n$$\n\\frac{\\partial f}{\\partial x} = \\lim_{h \\to 0} \\frac{f(x + h, y) - f(x, y)}{h}\n$$\nMixed partial derivatives\nSecond partial derivatives are denoted by $\\frac{\\partial^2 f}{\\partial x^2}$ or $f_{xx}$. When using the \"del\" notation (with the $\\partial$ symbol) you take derivatives from right to left order; when using the subscript notation, you take derivatives from left to right order.\nSecond partial derivatives commute, which means the order you take them doesn't matter. Thus $\\frac{\\partial f}{\\partial x \\partial y} = \\frac{\\partial f}{\\partial y \\partial x}$.\nThe nabla symbol\nThe nabla symbol $\\nabla$ represents a \"vector\" of partial derivative operators:\n$$\n\\nabla = \\left\\langle \\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial y}, \\frac{\\partial}{\\partial z} \\right\\rangle\n$$\nScalar-valued functions\nA scalar-valued function is a function that always outputs a number for each input, not a vector, such as $f(x, y) = 2x + 3y^2$.\nGradients\nThe gradient of a scalar-valued function, denoted $\\nabla f$, is given by a vector containing all the partial derivatives of the function. In two dimensions, it is given by:\n$$\n\\nabla f(x, y) = \\left\\langle \\frac{\\partial f}{\\partial x}, \\frac{\\partial f}{\\partial y} \\right\\rangle\n$$\nIn three dimensions, it is similarly given by:\n$$\n\\nabla f(x, y, z) = \\left\\langle \\frac{\\partial f}{\\partial x}, \\frac{\\partial f}{\\partial y}, \\frac{\\partial f}{\\partial z} \\right\\rangle\n$$\nThe gradient can be evaluated at a point $(x, y, z)$ by evaluating each of the partial derivatives at that point\nDirectional derivative\nThe directional derivative is the rate of change along a specific vector $\\vec v$ and is given by:\n$$\n\\nabla_{\\vec v} , f = \\nabla f \\cdot \\vec v\n$$\nMultivariable chain rule\nIf we have a function $f(g(t))$, then:\n$$\n\\frac{df}{dt} = \\frac{\\partial f}{\\partial x} \\frac{dx}{dt} + \\frac{\\partial f}{\\partial y} \\frac{dt}{dt} = \\nabla f(g(t)) \\cdot g'(t)\n$$\nParametric surfaces\nJust as there can be surfaces formed by functions of $x$ and $y$, there can be parametric surfaces formed by functions of $s$ and $t$. They are denoted $f(s, t)$ and can be differentiated in the same way as normal surfaces, i.e. $\\frac{\\partial f}{\\partial s}$ and $\\frac{\\partial f}{\\partial t}$.\nVector-valued functions\nVector-valued functions produce a vector for each input, for instance:\n$$\n\\vec f(t) = \n\\begin{bmatrix}\nt^2 + 2t \\\n\\sin(2t) + t\n\\end{bmatrix}\n$$\nNote that vector-valued functions can have components that are functions of $x, y, z$, or functions of $t$, in which case its components are parametric functions.\nThe derivative of a vector-valued function is another vector in all cases. For example, velocity is often given by a vector-valued function where:\n$$\n\\vec v(t) = \\begin{bmatrix}\nv_x(t) \\\nv_y(t) \\\nv_z(t)\n\\end{bmatrix} = \\begin{bmatrix}\nx'(t) \\\ny'(t) \\\nz'(t)\n\\end{bmatrix}\n$$\nSpeed is given by the norm of the velocity function:\n$$\nv = \\sqrt{v_x^2 + v_y^2 + v_z^2}\n$$\nIf the vector-valued function is of one variable, e.g. $\\vec v(t)$, then its derivative is a regular derivative $\\frac{d \\vec v}{dt}$. If the vector-valued function is of several variables, e.g. $\\vec v(s, t)$, then it has one partial derivative for each variable, e.g. $\\frac{\\partial \\vec v}{\\partial s}$ and $\\frac{\\partial \\vec v}{\\partial t}$.\nThe same methodology for vector-valued functions applies to vector fields.\nCurvature\nThe curvature $\\kappa$ of a vector-valued function $\\vec v(t)$ is given by:\n$$\n\\kappa = \\frac{|d \\vec T|}{|ds|} = \\frac{\\vec v'(t)}{| v'(t)|}\n$$\nwhere the double bars indicate normalizing the vector.\nVector fields and scalar fields\nFields are mathematical objects that span space and have a unique value at each point in space. Familiar examples include the electromagnetic field and gravitational field. They are written with the same notation as functions, just usually with a different symbol such as $E$, $B$, $g$ or $\\phi$.\nScalar fields, such as temperature, assign a number to each point in space. Vector fields assign a vector to each point in space. A gradient is only defined for a scalar field - the vector-field equivalent of the gradient for vector fields is called the Jacobian, and will be covered later.\nDivergence\nDivergence, denoted by $\\nabla \\cdot \\vec F$, represents the tendency of a vector field to flow out or in to a certain point:\n\nIf vectors that point inwards towards a certain point are bigger than vectors that point outwards at that point, the divergence is negative and we have a sink\nIf vectors that point inwards towards a certain point are smaller than vectors that point outwards at that point, the divergence is positive and we have a source\nIf vectors that point inwards and vectors that point outwards at a certain point are equal in size, the divergence is zero\n\nThe divergence of a vector field $\\vec F$ with components $\\langle F_x, F_y, F_z\\rangle$ is given by:\n$$\n\\nabla \\cdot \\vec F = \\frac{\\partial F_x}{\\partial x} + \\frac{\\partial F_y}{\\partial y} + \\frac{\\partial F_z}{\\partial z}\n$$\nDivergence is only defined on vector fields, not on scalar fields.\nCurl\nCurl, denoted by $\\nabla \\times \\vec F$, represents the tendency of a vector field to rotate around a certain point:\n\nPositive curl is a tendency of vectors to rotate counterclockwise around a point\nNegative curl is a tendency of vectors to rotate clockwise around a point\nZero curl is when counterclockwise and clockwise vectors cancel out or if the vectors do not rotate around a point\n\nIn 2D, the curl of a vector field is given by:\n$$\n\\nabla \\times \\vec F = \\frac{\\partial F_y}{\\partial x} - \\frac{\\partial F_x}{\\partial y}\n$$\nIn 3D, the curl of a vector field is the determinant of a 3 x 3 matrix:\n$$\n\\nabla \\times \\vec F = \n\\begin{vmatrix}\n\\hat i & \\hat j & \\hat k \\\n\\frac{\\partial}{\\partial x} & \\frac{\\partial}{\\partial y} & \\frac{\\partial}{\\partial z} \\\nF_x & F_y & F_z\n\\end{vmatrix}\n$$\nLaplacian\nThe Laplacian, denoted by $\\nabla^2 f$, is a vector field formed from the second derivatives of a scalar field. It is given by:\n$$\n\\nabla^2 f = \\frac{\\partial^2 f}{\\partial x^2} + \\frac{\\partial^2 f}{\\partial y^2} + \\frac{\\partial^2 f}{\\partial z^2}\n$$\nA function is called harmonic if it satisfies $\\nabla^2 f = 0$. This is a partial differential equation called Laplace's equation.\nJacobian\nThe Jacobian is the analogue of the gradient for vector-valued functions. For a vector-valued function $\\vec F$ with components $\\langle F_x, F_y \\rangle$, the Jacobian is given by:\n$$\nJ = \n\\begin{bmatrix}\n\\nabla F_x \\\n\\nabla F_y\n\\end{bmatrix} =\n\\begin{bmatrix}\n\\frac{\\partial F_x}{\\partial x} & \\frac{\\partial F_x}{\\partial y} \\\n\\frac{\\partial F_y}{\\partial x} & \\frac{\\partial F_y}{\\partial y}\n\\end{bmatrix}\n$$\nFor a vector valued function $\\vec F$ of three dimensions, the Jacobian is given by:\n$$\nJ =\n\\begin{bmatrix}\n\\frac{\\partial F_x}{\\partial x} & \\frac{\\partial F_x}{\\partial y} & \\frac{\\partial F_x}{\\partial z} \\\n\\frac{\\partial F_y}{\\partial x} & \\frac{\\partial F_y}{\\partial y} & \\frac{\\partial F_y}{\\partial z} \\\n\\frac{\\partial F_z}{\\partial x} & \\frac{\\partial F_z}{\\partial y} & \\frac{\\partial F_z}{\\partial z}\n\\end{bmatrix}\n$$\nThe determinant of the Jacobian is calculated just like the determinant of any other matrix. The absolute value of the determinant of the Jacobian tells us about how areas change area around a point:\n\nIf the determinant is 1, the area remains the same area\nIf the determinant is less than 1, the area contracts\nIf the determinant is greater than 1, the area expands\nIf the determinant is 0, the area contracts infinitely\n\nTangent plane\nThe tangent plane is the local linear approximation to a function at a certain point. It is often used to simplify a complicated function when the area being studied is around a certain point.\nTangent plane (explicit functions)\nThe tangent plane to a function $f(x, y)$ at a point $(x_0, y_0)$ is given by:\n$$\nT(x, y) = f(x_0, y_0) + f_x (x_0, y_0) (x - x_0) + f_y (x_0, y_0) (y - y_0)\n$$\nTangent plane (implicit functions)\nThe implicit tangent plane to a function $f(x, y, z) = 0$ at a point $(x_0, y_0, z_0)$ is given by:\n$$\nf_x (x - x_0) + f_y(y - y_0) + f_z (z - z_0) = 0\n$$\n","id":"https://elaraproject.github.io/elara-hub/multivar/","title":"Multivariable calculus guide"},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"body":"Fundamental issues:\n\nMust reach critical threshold of ~15-25 people to be able to start getting attention\nThen we can present our work to a larger audience (e.g. SPS, official events, etc.) and get more people to join\nWith a bigger team we can build more advanced prototypes and have more results that we can then use to recruit more people - positive feedback loop above critical threshold\nAlso other options:\n\n[Project Elara Visualization-based outreach]\nSoftware-based outreach (marketing the elara libraries as part of the project)\n\n\nHowever to get to 15-25 people we must use direct outreach\n\nUse DALL-E/Midjourney/Stable Diffusion to create youtube videos/website photos/poster images for Project Elara, and I'll compose the musical background music for the videos.\n","id":"https://elaraproject.github.io/elara-hub/outreach-plan/","title":"Project Elara Outreach Plan"},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"body":"Project Elara is founded on a few key ideas. First, we have a fervent desire to make the world better - and not just a little bit better, we want to make a world that we could only dream of today, a world as close to the ideal as possible. But of course, we know that for a small group of people, accomplishing such lofty goals isn't going to be easy. So we follow a cathedral-style workflow: what can't be finished in one generation will be carried on by the next generation, and then the next, until one day, the work is finished.\nSecond, we want to stay true to the project's ideals far into the future. This entails that the hands to steer the project must always be our own. The project is also designed to be resilient, to resist outside influences, and to be as self-sufficient as possible. It is not bound to any physical location, country, or government, all its software and hardware are free and open-source, and the project's main publications can all be read offline. In addition, we try to stay away from depending on large organizations - while we may not have as many resources, we can work with less bureaucracy hindering our progress.\nFinally, we want the project to be representative of all humanity. So the project's community is meant to be safe, inclusive, and accepting and built on kindness and respect. It is understanding of everything except intolerance, but it will not tolerate any intolerance.\n","id":"https://elaraproject.github.io/elara-hub/project-philosophy/","title":"Project Philosophy"},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"body":"This page contains subpages that are relativity-related. Relativistic calculations are of primary interest for the Elara Two and Elara Three stages of the project, but they are necessary for some high-precision spacecraft dynamics calculations in Elara One as well.\nIndex\n\n[Evaluating christoffel symbols quickly]\n[Geometrized units]\n\nExternal sources\n\nhttps://analyticphysics.com/General%20Relativity/Visualizing%20Aspects%20of%20the%20Kerr%20Metric.htm\nhttps://inspirehep.net/files/4125fb620def30c9536ff6eb62ff583d\n\n","id":"https://elaraproject.github.io/elara-hub/relativity-hub/","title":"Relativity Hub"},"https://elaraproject.github.io/elara-hub/stages/":{"body":"The project is divided into three big phases, each characterized by reaching a milestone:\n\nElara One\nElara Two\nElara Three\n\nOf these, Elara One is the current focus, as it won't be complete for another 50 years.\nElara One plans are as follows:\nStageDescription\nStage OneInitial prototype power generation\nStage TwoIon propulsion and independent maneuvering capability\nStage ThreeAutomated robotic repair spacecraft\nStage FourSpace assembly; from this point on smaller rockets will be used\nStage FiveAutomated thruster refueling in space\n\nAfter the first 5 keystone stages, launches will take place from all over the world at an increasing rate, with an anticipated 100 launches a year. This will pave the way for the elimination of fossil fuel power plants within the same timeframe. Within the span of 30-40 years, all fossil fuel plants should be decommissioned.\n","id":"https://elaraproject.github.io/elara-hub/stages/","title":"Project development stages"},"https://elaraproject.github.io/elara-hub/standard-notation/":{"body":"For Project Elara, the following are standard notations:\nFunction: $f(x)$\nFunction composition: $f(g(x))$\nLimit: $\\displaystyle \\lim_{x \\to x_0} f(x)$\nVector quantity: $\\mathbf{E}$ or $\\vec E$\nDerivative: $\\frac{df}{dx}$ (preferred), $f'(x)$ (alternative)\nNth-derivative: $\\frac{d^n f}{dx^n}$ (preferred), $f^{(n)}(x)$ (alternative)\nDerivative operator: $\\frac{d}{dx}$\nPartial derivative: $\\frac{\\partial f}{\\partial x}$\nPartial derivative operator: $\\frac{\\partial}{\\partial x}$\nGradient: $\\nabla f$\nDivergence: $\\nabla \\cdot \\mathbf{F}$\nCurl: $\\nabla \\times \\mathbf{F}$\nIndefinite integral/antiderivative:\n$$\n\\int f(x) dx\n$$\nDefinite integral:\n$$\n\\int_a^b f(x) dx\n$$\nLine integral (scalar):\n$$\n\\int_C f(x, y, z) d\\ell\n$$\nClosed line integral (scalar):\n$$\n\\oint_C f(x, y, z) d\\ell\n$$\nLine integral (vector):\n$$\n\\int_C \\mathbf{F} \\cdot \\mathbf{d\\ell}\n$$\nClosed line integral (vector):\n$$\n\\oint_C \\mathbf{F} \\cdot \\mathbf{d\\ell}\n$$\nSurface integral (scalar):\n$$\n\\iint_\\Sigma f(x, y, z) dS\n$$\nClosed surface integral (scalar):\n$$\n\\oiint_\\Sigma f(x, y, z){dS}\n$$\nSurface integral (vector):\n$$\n\\iint_\\Sigma \\mathbf{F} \\cdot \\mathbf{dS}\n$$\nClosed surface integral (vector):\n$$\n\\oiint_\\Sigma \\mathbf{F} \\cdot \\mathbf{dS}\n$$\nDouble integral:\n$$\n\\iint_R f(x, y) dA\n$$\nArea integral:\n$$\n\\iint_M dA\n$$\nTriple integral:\n$$\n\\iiint_\\Omega f(x, y, z) dV\n$$\nVolume integral:\n$$\n\\iiint_E dV\n$$\n","id":"https://elaraproject.github.io/elara-hub/standard-notation/","title":"Standardized calculus notation"},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"body":"Make a youtube channel containing cool raytraced visualizations of black holes, planets, stars, nebulae, galaxies, alien landscapes, wormholes and such to get people interested - see:\n\nhttps://github.com/zongzhengli/black-hole\nhttps://github.com/TheNosiriN/BabylonJS-Planets\nhttps://oaktrust.library.tamu.edu/bitstream/handle/1969.1/150989/LITAKER-THESIS-2013.pdf?sequence=1\nhttps://www.shadertoy.com/view/lstSRS\nhttps://blog.seanholloway.com/2022/03/13/visualizing-black-holes-with-general-relativistic-ray-tracing/\nhttps://www.solarsystemscope.com/textures/\nhttps://www.youtube.com/watch?v=3qJZGGHc3lg\n\n[Black hole raytracing]\nCombine custom Python scripting (for numerically integrating ODEs/PDEs) and a custom (GPU shader based) pathtracer written in elara-gfx to make realistic black hole/star/planet simulations. The actual models can be made in Blender/scripted from math, they're just rendered with a dedicated Project Elara renderer.\n","id":"https://elaraproject.github.io/elara-hub/visualization-outreach/","title":"Visualization-based outreach"}},"docInfo":{"https://elaraproject.github.io/elara-hub/":{"body":389,"title":1},"https://elaraproject.github.io/elara-hub/6-month-roadmap-1/":{"body":293,"title":4},"https://elaraproject.github.io/elara-hub/all-about-pdes/":{"body":959,"title":3},"https://elaraproject.github.io/elara-hub/alt-de-solver/":{"body":169,"title":4},"https://elaraproject.github.io/elara-hub/app-plans/":{"body":532,"title":4},"https://elaraproject.github.io/elara-hub/black-hole-raytracing/":{"body":398,"title":3},"https://elaraproject.github.io/elara-hub/elara-array-api-plan/":{"body":418,"title":3},"https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/":{"body":25,"title":5},"https://elaraproject.github.io/elara-hub/elara-hub-creation/":{"body":200,"title":4},"https://elaraproject.github.io/elara-hub/elara-hub-index/":{"body":183,"title":3},"https://elaraproject.github.io/elara-hub/elara-math-optimization/":{"body":46,"title":4},"https://elaraproject.github.io/elara-hub/elara-ml-api/":{"body":396,"title":4},"https://elaraproject.github.io/elara-hub/eval-christoffels/":{"body":352,"title":4},"https://elaraproject.github.io/elara-hub/extra/":{"body":164,"title":2},"https://elaraproject.github.io/elara-hub/focusing-chamber-1/":{"body":182,"title":5},"https://elaraproject.github.io/elara-hub/funny/":{"body":8,"title":3},"https://elaraproject.github.io/elara-hub/future-extensions/":{"body":641,"title":3},"https://elaraproject.github.io/elara-hub/geometrized/":{"body":70,"title":2},"https://elaraproject.github.io/elara-hub/h2-co2/":{"body":37,"title":3},"https://elaraproject.github.io/elara-hub/handbook-addthings/":{"body":330,"title":4},"https://elaraproject.github.io/elara-hub/integration-techniques/":{"body":209,"title":2},"https://elaraproject.github.io/elara-hub/library-plans/":{"body":1173,"title":4},"https://elaraproject.github.io/elara-hub/markdown-guide/":{"body":58,"title":3},"https://elaraproject.github.io/elara-hub/menu/":{"body":0,"title":2},"https://elaraproject.github.io/elara-hub/meta/":{"body":23,"title":3},"https://elaraproject.github.io/elara-hub/multivar/":{"body":847,"title":3},"https://elaraproject.github.io/elara-hub/outreach-plan/":{"body":78,"title":4},"https://elaraproject.github.io/elara-hub/project-philosophy/":{"body":124,"title":2},"https://elaraproject.github.io/elara-hub/relativity-hub/":{"body":35,"title":2},"https://elaraproject.github.io/elara-hub/stages/":{"body":91,"title":3},"https://elaraproject.github.io/elara-hub/standard-notation/":{"body":150,"title":3},"https://elaraproject.github.io/elara-hub/visualization-outreach/":{"body":71,"title":3}},"length":32},"lang":"English"}; \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..1f815e6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,99 @@ + + + + https://elaraproject.github.io/elara-hub/ + + + https://elaraproject.github.io/elara-hub/6-month-roadmap-1/ + + + https://elaraproject.github.io/elara-hub/all-about-pdes/ + + + https://elaraproject.github.io/elara-hub/alt-de-solver/ + + + https://elaraproject.github.io/elara-hub/app-plans/ + + + https://elaraproject.github.io/elara-hub/black-hole-raytracing/ + + + https://elaraproject.github.io/elara-hub/elara-array-api-plan/ + + + https://elaraproject.github.io/elara-hub/elara-gfx-continuing-work/ + + + https://elaraproject.github.io/elara-hub/elara-hub-creation/ + + + https://elaraproject.github.io/elara-hub/elara-hub-index/ + + + https://elaraproject.github.io/elara-hub/elara-math-optimization/ + + + https://elaraproject.github.io/elara-hub/elara-ml-api/ + + + https://elaraproject.github.io/elara-hub/eval-christoffels/ + + + https://elaraproject.github.io/elara-hub/extra/ + + + https://elaraproject.github.io/elara-hub/focusing-chamber-1/ + + + https://elaraproject.github.io/elara-hub/funny/ + + + https://elaraproject.github.io/elara-hub/future-extensions/ + + + https://elaraproject.github.io/elara-hub/geometrized/ + + + https://elaraproject.github.io/elara-hub/h2-co2/ + + + https://elaraproject.github.io/elara-hub/handbook-addthings/ + + + https://elaraproject.github.io/elara-hub/integration-techniques/ + + + https://elaraproject.github.io/elara-hub/library-plans/ + + + https://elaraproject.github.io/elara-hub/markdown-guide/ + + + https://elaraproject.github.io/elara-hub/menu/ + + + https://elaraproject.github.io/elara-hub/meta/ + + + https://elaraproject.github.io/elara-hub/multivar/ + + + https://elaraproject.github.io/elara-hub/outreach-plan/ + + + https://elaraproject.github.io/elara-hub/project-philosophy/ + + + https://elaraproject.github.io/elara-hub/relativity-hub/ + + + https://elaraproject.github.io/elara-hub/stages/ + + + https://elaraproject.github.io/elara-hub/standard-notation/ + + + https://elaraproject.github.io/elara-hub/visualization-outreach/ + + diff --git a/stages/index.html b/stages/index.html new file mode 100644 index 0000000..da906de --- /dev/null +++ b/stages/index.html @@ -0,0 +1,145 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Project development stages

+ +

The project is divided into three big phases, each characterized by reaching a milestone:

+
    +
  • Elara One
  • +
  • Elara Two
  • +
  • Elara Three
  • +
+

Of these, Elara One is the current focus, as it won't be complete for another 50 years.

+

Elara One plans are as follows:

+ + + + + + +
StageDescription
Stage OneInitial prototype power generation
Stage TwoIon propulsion and independent maneuvering capability
Stage ThreeAutomated robotic repair spacecraft
Stage FourSpace assembly; from this point on smaller rockets will be used
Stage FiveAutomated thruster refueling in space
+

After the first 5 keystone stages, launches will take place from all over the world at an increasing rate, with an anticipated 100 launches a year. This will pave the way for the elimination of fossil fuel power plants within the same timeframe. Within the span of 30-40 years, all fossil fuel plants should be decommissioned.

+ + +
+
+ + + + + + + + + diff --git a/standard-notation/index.html b/standard-notation/index.html new file mode 100644 index 0000000..bb51cae --- /dev/null +++ b/standard-notation/index.html @@ -0,0 +1,198 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Standardized calculus notation

+ +

For Project Elara, the following are standard notations:

+

Function: $f(x)$

+

Function composition: $f(g(x))$

+

Limit: $\displaystyle \lim_{x \to x_0} f(x)$

+

Vector quantity: $\mathbf{E}$ or $\vec E$

+

Derivative: $\frac{df}{dx}$ (preferred), $f'(x)$ (alternative)

+

Nth-derivative: $\frac{d^n f}{dx^n}$ (preferred), $f^{(n)}(x)$ (alternative)

+

Derivative operator: $\frac{d}{dx}$

+

Partial derivative: $\frac{\partial f}{\partial x}$

+

Partial derivative operator: $\frac{\partial}{\partial x}$

+

Gradient: $\nabla f$

+

Divergence: $\nabla \cdot \mathbf{F}$

+

Curl: $\nabla \times \mathbf{F}$

+

Indefinite integral/antiderivative:

+

$$ +\int f(x) dx +$$

+

Definite integral:

+

$$ +\int_a^b f(x) dx +$$ +Line integral (scalar):

+

$$ +\int_C f(x, y, z) d\ell +$$ +Closed line integral (scalar):

+

$$ +\oint_C f(x, y, z) d\ell +$$

+

Line integral (vector):

+

$$ +\int_C \mathbf{F} \cdot \mathbf{d\ell} +$$ +Closed line integral (vector):

+

$$ +\oint_C \mathbf{F} \cdot \mathbf{d\ell} +$$

+

Surface integral (scalar):

+

$$ +\iint_\Sigma f(x, y, z) dS +$$ +Closed surface integral (scalar):

+

$$ +\oiint_\Sigma f(x, y, z){dS} +$$

+

Surface integral (vector):

+

$$ +\iint_\Sigma \mathbf{F} \cdot \mathbf{dS} +$$

+

Closed surface integral (vector):

+

$$ +\oiint_\Sigma \mathbf{F} \cdot \mathbf{dS} +$$

+

Double integral:

+

$$ +\iint_R f(x, y) dA +$$ +Area integral:

+

$$ +\iint_M dA +$$

+

Triple integral:

+

$$ +\iiint_\Omega f(x, y, z) dV +$$

+

Volume integral:

+

$$ +\iiint_E dV +$$

+ + +
+
+ + + + + + + + + diff --git a/visualization-outreach/index.html b/visualization-outreach/index.html new file mode 100644 index 0000000..d750b64 --- /dev/null +++ b/visualization-outreach/index.html @@ -0,0 +1,141 @@ + + + + + + + Elara Hub + + + + + + + + + + + + +
+
+ +

Visualization-based outreach

+ +

Make a youtube channel containing cool raytraced visualizations of black holes, planets, stars, nebulae, galaxies, alien landscapes, wormholes and such to get people interested - see:

+ +

[Black hole raytracing]

+

Combine custom Python scripting (for numerically integrating ODEs/PDEs) and a custom (GPU shader based) pathtracer written in elara-gfx to make realistic black hole/star/planet simulations. The actual models can be made in Blender/scripted from math, they're just rendered with a dedicated Project Elara renderer.

+ + +
+
+ + + + + + + + +