This file outlines how to propose and make changes to rbmi as well as providing details about more obscure aspects of the package’s development process.
+
+
Setup
+
In order to develop or contribute to rbmi you will need to access to a C/C++ compiler. If you are on Windows you should install rtools or if you are on macOS you should install Xcode. Likewise, you will also need to install all of the package’s development dependencies. This can be done by launching R from within the project root and executing:
If you want to make a code contribution, it’s a good idea to first file an issue and make sure someone from the team agrees that it’s needed. If you’ve found a bug, please file an issue that illustrates the bug with a minimal reprex (this will also help you write a unit test, if needed).
+
+
Pull request process
+
This project uses a simple GitHub flow model for development. That is, code changes should be done in their own feature branch based off of the main branch and merged back into the main branch once complete.
+
Pull Requests will not be accepted unless all CI/CD checks have passed. (See the CI/CD section for more information).
+
Pull Requests relating to any of the package’s core R code must be accompanied by a corresponding unit test. Any pull requests containing changes to the core R code that do not contain a unit test to demonstrate that it is working as intended will not be accepted. (See the Unit Testing section for more information).
+
Pull Requests should add a few lines about what has been changed to the NEWS.md file.
Please ensure your code conforms to lintr. You can check this by running lintr::lint("FILE NAME") on any files you have modified and ensuring that the findings are kept to as few as possible. We do not have any hard requirements on following lintr’s conventions but do encourage developers to follow its guidance as closely as possible.
+
This project uses 4 space indents, contributions not following this will not be accepted.
+
This project makes use of S3 and R6 for OOP. Usage of S4 and other OOP systems should be avoided unless absolutely necessary to ensure consistency. Having said that it is recommended to stick to S3 unless modification in place or other R6 specific features are required.
+
The current desire of this package is to keep the dependency tree as small as possible. To that end you are discouraged from adding any additional packages to the “Depends” / “Imports” section unless absolutely essential. If you are importing a package just to use a single function then consider just copying the source code of that function instead, though please check the licence and include proper attribution/notices. There are no such expectations for “Suggests” and you are free to use any package in the vignettes / unit tests, though again please be mindful to not be unnecessarily excessive with this.
+
+
+
+
Unit Testing & CI/CD
+
This project uses testthat to perform unit testing in combination with GitHub Actions for CI/CD.
+
+
Scheduled Testing
+
Due to the stochastic nature of this package some unit tests take a considerable amount of time to execute. To avoid issues with usability, unit tests that take more than a couple of seconds to run should be deferred to the scheduled testing. These are tests that are only run occasionally on a periodic basis (currently twice a month) and not on every pull request / push event.
+
To defer a test to the scheduled build simply include skip_if_not(is_full_test()) to the top of the test_that() block i.e.
+
+test_that("some unit test", {
+skip_if_not(is_full_test())
+expect_equal(1,1)
+})
+
The scheduled tests can also be manually activated by going to “https://github.com/insightsengineering/rbmi” -> “Actions” -> “Bi-Weekly” -> “Run Workflow”. It is advisable to do this before releasing to CRAN.
+
+
+
Docker Images
+
To support CI/CD, in terms of reducing setup time, a Docker images has been created which contains all the packages and system dependencies required for this project. The image can be found at:
+
ghcr.io/insightsengineering/rbmi:latest
+
This image is automatically re-built once a month to contain the latest version of R and its packages. The code to create this images can be found in misc/docker.
+
To build the image locally run the following from the project root directory:
A particular issue with testing this package is reproducibility. For the most part this is handled well via set.seed() however stan/rstan does not guarantee reproducibility even with the same seed if run on different hardware.
+
This issue surfaces itself when testing the print messages of the pool object which displays treatment estimates which are thus not identical when run on different machines. To address this issue pre-made pool objects have been generated and stored in R/sysdata.rda (which itself is generated by data-raw/create_print_test_data.R). The generated print messages are compared to expected values which are stored in tests/testthat/_snaps/ (which themselves are automatically created by testthat::expect_snapshot())
+
+
+
+
Fitting MMRM’s
+
This package currently uses the mmrm package to fit MMRM models. This package is still fairly new but has so far proven to be very stable, fast and reliable. If you do spot any issues with the MMRM package please do raise them in the corresponding GitHub Repository - link
+
As the mmrm package uses TMB it is not uncommon to see warnings about either inconsistent versions between what TMB and the Matrix package were compiled as. In order to resolve this you may wish to re-compile these packages from source using:
Note that you will need to have rtools installed if you are on a Windows machine or Xcode if you are running macOS (or somehow else have access to a C/C++ compiler).
+
+
+
rstan
+
The Bayesian models fitted by this package are implemented via stan/rstan. The code for this can be found in inst/stan/MMRM.stan. Note that the package will automatically take care of compiling this code when you install it or run devtools::load_all(). Please note that the package won’t recompile the code unless you have changed the source code or you delete the src directory.
+
+
+
Vignettes
+
CRAN imposes a 10-minute run limit on building, compiling and testing your package. To keep to this limit the vignettes are pre-built; that is to say that simply changing the source code will not automatically update the vignettes, you will need to manually re-build them.
+
To do this you need to run:
+
Rscript vignettes/build.R
+
Once re-built you will then need to commit the updated *.html files to the git repository.
+
For reference this static vignette process works by using the “asis” vignette engine provided by R.rsp. This works by getting R to only recognise vignettes as files ending in *.html.asis; it then builds them by simply copying the corresponding files ending in *.html to the relevent docs/ folder in the built package.
+
+
+
Misc & Local Folders
+
The misc/ folder in this project is used to hold useful scripts, analyses, simulations & infrastructure code that we wish to keep but isn’t essential to the build or deployment of the package. Feel free to store additional stuff in here that you feel is worth keeping.
+
Likewise, local/ has been added to the .gitignore file meaning anything stored in this folder won’t be committed to the repository. For example, you may find this useful for storing personal scripts for testing or more generally exploring the package during development.
Terms and Conditions for use, reproduction, and distribution
+
+
1. Definitions
+
“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.
+
“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as “Not a Contribution.”
+
“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+
+
2. Grant of Copyright License
+
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+
+
3. Grant of Patent License
+
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+
+
4. Redistribution
+
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+(d) If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+
+
5. Submission of Contributions
+
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+
+
6. Trademarks
+
This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+
+
7. Disclaimer of Warranty
+
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+
+
8. Limitation of Liability
+
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+
+
9. Accepting Warranty or Additional Liability
+
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
END OF TERMS AND CONDITIONS
+
+
+
+
APPENDIX: How to apply the Apache License to your work
+
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets [] replaced with your own identifying information. (Don’t include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.
+
Copyright [yyyy] [name of copyright owner]
+
+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.
As described in section 3.10.2 of the statistical specifications of the package (vignette(topic = "stat_specs", package = "rbmi")), two different types of variance estimators have been proposed for reference-based imputation methods in the statistical literature (Bartlett (2023)).
+The first is the frequentist variance which describes the actual repeated sampling variability of the estimator and results in inference which is correct in the frequentist sense, i.e. hypothesis tests have accurate type I error control and confidence intervals have correct coverage probabilities under repeated sampling if the reference-based assumption is correctly specified (Bartlett (2023), Wolbers et al. (2022)).
+Reference-based missing data assumption are strong and borrow information from the control arm for imputation in the active arm.
+As a consequence, the size of frequentist standard errors for treatment effects may decrease with increasing amounts of missing data.
+The second is the so-called “information-anchored” variance which was originally proposed in the context of sensitivity analyses (Cro, Carpenter, and Kenward (2019)). This variance estimator is based on disentangling point estimation and variance estimation altogether.
+The resulting information-anchored variance is typically very similar to the variance under missing-at-random (MAR) imputation and increases with increasing amounts of missing data at approximately the same rate as MAR imputation.
+However, the information-anchored variance does not reflect the actual variability of the reference-based estimator and the resulting frequentist inference is highly conservative resulting in a substantial power loss.
+
Reference-based conditional mean imputation combined with a resampling method such as the jackknife or the bootstrap was first introduced in Wolbers et al. (2022).
+This approach naturally targets the frequentist variance. The information-anchored variance is typically estimated using Rubin’s rules for Bayesian multiple imputation which are not applicable within the conditional mean imputation framework.
+However, an alternative information-anchored variance proposed by Lu (2021) can easily be obtained as we show below.
+The basic idea of Lu (2021) is to obtain the information-anchored variance via a MAR imputation combined with a delta-adjustment where delta is selected in a data-driven way to match the reference-based estimator.
+For conditional mean imputation, the proposal by Lu (2021) can be implemented by choosing the delta-adjustment as the difference between the conditional mean imputation under the chosen reference-based assumption and MAR on the original dataset.
+The variance can then be obtained via the jackknife or the bootstrap while keeping the delta-adjustment fixed. The resulting variance estimate is very similar to Rubin’s variance.
+Moreover, as shown in Cro, Carpenter, and Kenward (2019), the variance of MAR-imputation combined with a delta-adjustment achieves even better information-anchoring properties than Rubin’s variance for reference-based imputation.
+Reference-based missing data assumptions are strong and borrow information from the control arm for imputation in the active arm.
+
This vignette demonstrates first how to obtain frequentist inference using reference-based conditional mean imputation using rbmi, and then shows that an information-anchored inference can also be easily implemented using the package.
+
+
+
+2 Data and model specification
+
+
We use a publicly available example dataset from an antidepressant clinical trial of an active drug versus placebo.
+The relevant endpoint is the Hamilton 17-item depression rating scale (HAMD17) which was assessed at baseline and at weeks 1, 2, 4, and 6.
+Study drug discontinuation occurred in 24% of subjects from the active drug and 26% of subjects from placebo.
+All data after study drug discontinuation are missing and there is a single additional intermittent missing observation.
+
We consider an imputation model with the mean change from baseline in the HAMD17 score as the outcome (variable CHANGE in the dataset).
+The following covariates are included in the imputation model: the treatment group (THERAPY), the (categorical) visit (VISIT), treatment-by-visit interactions, the baseline HAMD17 score (BASVAL), and baseline HAMD17 score-by-visit interactions.
+A common unstructured covariance matrix structure is assumed for both groups. The analysis model is an ANCOVA model with the treatment group as the primary factor and adjustment for the baseline HAMD17 score.
+For this example, we assume that the imputation strategy after the ICE “study-drug discontinuation” is Jump To Reference (JR) for all subjects and the imputation is based on conditional mean imputation combined with jackknife resampling (but the bootstrap could also have been selected).
+
+
+
+3 Reference-based conditional mean imputation - frequentist inference
+
+
Conditional mean imputation combined with a resampling method such as jackknife or bootstrap naturally targets a frequentist estimation of the standard error of the treatment effect, thus providing a valid frequentist inference.
+Here we provide the code to obtain frequentist inference for reference-based conditional mean imputation using rbmi.
+
The code used in this section is almost identical to the code in the quickstart vignette (vignette(topic = "quickstart", package = "rbmi")) except that we use conditional mean imputation combined with the jackknife (method_condmean(type = "jackknife")) here rather than Bayesian multiple imputation (method_bayes()).
+We therefore refer to that vignette and the help files for the individual functions for further explanations and details.
+
+
+3.1 Draws
+
+
We will make use of rbmi::expand_locf() to expand the dataset in order to have one row per subject per visit with missing outcomes denoted as NA. We will then construct the data_ice, vars and method input arguments to the first core rbmi function, draws().
+Finally, we call the function draws() to derive the parameter estimates of the base imputation model for the full dataset and all leave-one-subject-out samples.
+
+library(rbmi)
+library(dplyr)
+#>
+#> Attaching package: 'dplyr'
+#> The following objects are masked from 'package:stats':
+#>
+#> filter, lag
+#> The following objects are masked from 'package:base':
+#>
+#> intersect, setdiff, setequal, union
+
+dat<-antidepressant_data
+
+# Use expand_locf to add rows corresponding to visits with missing outcomes to
+# the dataset
+dat<-expand_locf(
+dat,
+ PATIENT =levels(dat$PATIENT), # expand by PATIENT and VISIT
+ VISIT =levels(dat$VISIT),
+ vars =c("BASVAL", "THERAPY"), # fill with LOCF BASVAL and THERAPY
+ group =c("PATIENT"),
+ order =c("PATIENT", "VISIT")
+)
+
+# create data_ice and set the imputation strategy to JR for
+# each patient with at least one missing observation
+dat_ice<-dat%>%
+arrange(PATIENT, VISIT)%>%
+filter(is.na(CHANGE))%>%
+group_by(PATIENT)%>%
+slice(1)%>%
+ungroup()%>%
+select(PATIENT, VISIT)%>%
+mutate(strategy ="JR")
+
+# In this dataset, subject 3618 has an intermittent missing values which
+# does not correspond to a study drug discontinuation. We therefore remove
+# this subject from `dat_ice`. (In the later imputation step, it will
+# automatically be imputed under the default MAR assumption.)
+dat_ice<-dat_ice[-which(dat_ice$PATIENT==3618),]
+
+# Define the names of key variables in our dataset and
+# the covariates included in the imputation model using `set_vars()`
+vars<-set_vars(
+ outcome ="CHANGE",
+ visit ="VISIT",
+ subjid ="PATIENT",
+ group ="THERAPY",
+ covariates =c("BASVAL*VISIT", "THERAPY*VISIT")
+)
+
+# Define which imputation method to use (here: conditional mean imputation
+# with jackknife as resampling)
+method<-method_condmean(type ="jackknife")
+
+# Create samples for the imputation parameters by running the draws() function
+drawObj<-draws(
+ data =dat,
+ data_ice =dat_ice,
+ vars =vars,
+ method =method,
+ quiet =TRUE
+)
+drawObj
+#>
+#> Draws Object
+#> ------------
+#> Number of Samples: 1 + 172
+#> Number of Failed Samples: 0
+#> Model Formula: CHANGE ~ 1 + THERAPY + VISIT + BASVAL * VISIT + THERAPY * VISIT
+#> Imputation Type: condmean
+#> Method:
+#> name: Conditional Mean
+#> covariance: us
+#> threshold: 0.01
+#> same_cov: TRUE
+#> REML: TRUE
+#> type: jackknife
+
+
+
+3.2 Impute
+
+
We can use now the function impute() to perform the imputation of the original dataset and of each leave-one-out samples using the results obtained at the previous step.
+
+references<-c("DRUG"="PLACEBO", "PLACEBO"="PLACEBO")
+imputeObj<-impute(drawObj, references)
+imputeObj
+#>
+#> Imputation Object
+#> -----------------
+#> Number of Imputed Datasets: 1 + 172
+#> Fraction of Missing Data (Original Dataset):
+#> 4: 0%
+#> 5: 8%
+#> 6: 13%
+#> 7: 25%
+#> References:
+#> DRUG -> PLACEBO
+#> PLACEBO -> PLACEBO
+
+
+
+3.3 Analyse
+
+
Once the datasets have been imputed, we can call the analyse() function to apply the complete-data analysis model (here ANCOVA) to each imputed dataset.
+
+
+# Set analysis variables using `rbmi` function "set_vars"
+vars_an<-set_vars(
+ group =vars$group,
+ visit =vars$visit,
+ outcome =vars$outcome,
+ covariates ="BASVAL"
+)
+
+# Analyse MAR imputation with derived delta adjustment
+anaObj<-analyse(
+imputeObj,
+rbmi::ancova,
+ vars =vars_an
+)
+anaObj
+#>
+#> Analysis Object
+#> ---------------
+#> Number of Results: 1 + 172
+#> Analysis Function: rbmi::ancova
+#> Delta Applied: FALSE
+#> Analysis Estimates:
+#> trt_4
+#> lsm_ref_4
+#> lsm_alt_4
+#> trt_5
+#> lsm_ref_5
+#> lsm_alt_5
+#> trt_6
+#> lsm_ref_6
+#> lsm_alt_6
+#> trt_7
+#> lsm_ref_7
+#> lsm_alt_7
+
+
+
+3.4 Pool
+
+
Finally, we can extract the treatment effect estimates and perform inference using the jackknife variance estimator. This is done by calling the pool() function.
This gives an estimated treatment effect of
+2.13 (95% CI 0.44 to 3.81)
+at the last visit with an associated p-value of 0.013.
+
+
+
+
+4 Reference-based conditional mean imputation - information-anchored inference
+
+
In this section, we present how the estimation process based on conditional mean imputation combined with the jackknife can be adapted to obtain an information-anchored variance following the proposal by Lu (2021).
+
+
+4.1 Draws
+
+
The code for the pre-processing of the dataset and for the “draws” step is equivalent to the code provided for the frequentist inference. Please refer to that section for details about this step.
+
+
+library(rbmi)
+library(dplyr)
+
+dat<-antidepressant_data
+
+# Use expand_locf to add rows corresponding to visits with missing outcomes to
+# the dataset
+dat<-expand_locf(
+dat,
+ PATIENT =levels(dat$PATIENT), # expand by PATIENT and VISIT
+ VISIT =levels(dat$VISIT),
+ vars =c("BASVAL", "THERAPY"), # fill with LOCF BASVAL and THERAPY
+ group =c("PATIENT"),
+ order =c("PATIENT", "VISIT")
+)
+
+# create data_ice and set the imputation strategy to JR for
+# each patient with at least one missing observation
+dat_ice<-dat%>%
+arrange(PATIENT, VISIT)%>%
+filter(is.na(CHANGE))%>%
+group_by(PATIENT)%>%
+slice(1)%>%
+ungroup()%>%
+select(PATIENT, VISIT)%>%
+mutate(strategy ="JR")
+
+# In this dataset, subject 3618 has an intermittent missing values which
+# does not correspond to a study drug discontinuation. We therefore remove
+# this subject from `dat_ice`. (In the later imputation step, it will
+# automatically be imputed under the default MAR assumption.)
+dat_ice<-dat_ice[-which(dat_ice$PATIENT==3618),]
+
+# Define the names of key variables in our dataset and
+# the covariates included in the imputation model using `set_vars()`
+vars<-set_vars(
+ outcome ="CHANGE",
+ visit ="VISIT",
+ subjid ="PATIENT",
+ group ="THERAPY",
+ covariates =c("BASVAL*VISIT", "THERAPY*VISIT")
+)
+
+# Define which imputation method to use (here: conditional mean imputation
+# with jackknife as resampling)
+method<-method_condmean(type ="jackknife")
+
+# Create samples for the imputation parameters by running the draws() function
+drawObj<-draws(
+ data =dat,
+ data_ice =dat_ice,
+ vars =vars,
+ method =method,
+ quiet =TRUE
+)
+drawObj
+
+
+
+4.2 Imputation step including calculation of delta-adjustment
+
+
The proposal by Lu (2021) is to replace the reference-based imputation by a MAR imputation combined with a delta-adjustment where delta is selected in a data-driven way to match the reference-based estimator.
+In rbmi, this is implemented by first performing the imputation under the defined reference-based imputation strategy (here JR) as well as under MAR separately.
+Second, the delta-adjustment is defined as the difference between the conditional mean imputation under reference-based and MAR imputation, respectively, on the original dataset.
+
To simplify the implementation, we have written a function get_delta_match_refBased that performs this step.
+The function takes as input arguments the draws object, data_ice (i.e. the data.frame containing the information about the intercurrent events and the imputation strategies), and references, a named vector that identifies the references to be used for reference-based imputation methods.
+The function returns a list containing the imputation objects under both reference-based and MAR imputation, plus a data.frame which contains the delta-adjustment.
+
+
+#' Get delta adjustment that matches reference-based imputation
+#'
+#' @param draws: A `draws` object created by `draws()`.
+#' @param data_ice: `data.frame` containing the information about the intercurrent
+#' events and the imputation strategies. Must represent the desired imputation
+#' strategy and not the MAR-variant.
+#' @param references: A named vector. Identifies the references to be used
+#' for reference-based imputation methods.
+#'
+#' @return
+#' The function returns a list containing the imputation objects under both
+#' reference-based and MAR imputation, plus a `data.frame` which contains the
+#' delta-adjustment.
+#'
+#' @seealso `draws()`, `impute()`.
+get_delta_match_refBased<-function(draws, data_ice, references){
+
+# Impute according to `data_ice`
+imputeObj<-impute(
+ draws =drawObj,
+ update_strategy =data_ice,
+ references =references
+)
+
+vars<-imputeObj$data$vars
+
+# Access imputed dataset (index=1 for method_condmean(type = "jackknife"))
+cmi<-extract_imputed_dfs(imputeObj, index =1, idmap =TRUE)[[1]]
+idmap<-attributes(cmi)$idmap
+cmi<-cmi[, c(vars$subjid, vars$visit, vars$outcome)]
+colnames(cmi)[colnames(cmi)==vars$outcome]<-"y_imp"
+
+# Map back original patients id since `rbmi` re-code ids to ensure id uniqueness
+
+cmi[[vars$subjid]]<-idmap[match(cmi[[vars$subjid]], names(idmap))]
+
+# Derive conditional mean imputations under MAR
+dat_ice_MAR<-data_ice
+dat_ice_MAR[[vars$strategy]]<-"MAR"
+
+# Impute under MAR
+# Note that in this specific context, it is desirable that an update
+
+# from a reference-based strategy to MAR uses the exact same data for
+# fitting the imputation models, i.e. that available post-ICE data are
+# omitted from the imputation model for both. This is the case when
+# using argument update_strategy in function impute().
+# However, for other settings (i.e. if one is interested in switching to
+# a standard MAR imputation strategy altogether), this behavior is
+# undesirable and, consequently, the function throws a warning which
+# we suppress here.
+suppressWarnings(
+imputeObj_MAR<-impute(
+draws,
+ update_strategy =dat_ice_MAR
+)
+)
+
+# Access imputed dataset (index=1 for method_condmean(type = "jackknife"))
+cmi_MAR<-extract_imputed_dfs(imputeObj_MAR, index =1, idmap =TRUE)[[1]]
+idmap<-attributes(cmi_MAR)$idmap
+cmi_MAR<-cmi_MAR[, c(vars$subjid, vars$visit, vars$outcome)]
+colnames(cmi_MAR)[colnames(cmi_MAR)==vars$outcome]<-"y_MAR"
+
+# Map back original patients id since `rbmi` re-code ids to ensure id uniqueness
+cmi_MAR[[vars$subjid]]<-idmap[match(cmi_MAR[[vars$subjid]], names(idmap))]
+
+# Derive delta adjustment "aligned with ref-based imputation",
+# i.e. difference between ref-based imputation and MAR imputation
+delta_adjust<-merge(cmi, cmi_MAR, by =c(vars$subjid, vars$visit), all =TRUE)
+delta_adjust$delta<-delta_adjust$y_imp-delta_adjust$y_MAR
+
+ret_obj<-list(
+ imputeObj =imputeObj,
+ imputeObj_MAR =imputeObj_MAR,
+ delta_adjust =delta_adjust
+)
+
+return(ret_obj)
+}
+
+references<-c("DRUG"="PLACEBO", "PLACEBO"="PLACEBO")
+
+res_delta_adjust<-get_delta_match_refBased(drawObj, dat_ice, references)
+
+
+
+4.3 Analyse
+
+
We use the function analyse() to add the delta-adjustment and perform the analysis of the imputed datasets under MAR.
+analyse() will take as the input argument imputations = res_delta_adjust$imputeObj_MAR, i.e. the imputation object corresponding to the MAR imputation (and not the JR imputation).
+The argument delta can be used to add a delta-adjustment prior to the analysis and we set this to the delta-adjustment obtained in the previous step: delta = res_delta_adjust$delta_adjust.
+
+
+# Set analysis variables using `rbmi` function "set_vars"
+vars_an<-set_vars(
+ group =vars$group,
+ visit =vars$visit,
+ outcome =vars$outcome,
+ covariates ="BASVAL"
+)
+
+# Analyse MAR imputation with derived delta adjustment
+anaObj_MAR_delta<-analyse(
+res_delta_adjust$imputeObj_MAR,
+rbmi::ancova,
+ delta =res_delta_adjust$delta_adjust,
+ vars =vars_an
+)
+
+
+
+4.4 Pool
+
+
We can finally use the pool() function to extract the treatment effect estimate (as well as the estimated marginal means) at each visit and apply the jackknife variance estimator to the analysis estimates from all the imputed leave-one-out samples.
This gives an estimated treatment effect of
+2.13 (95% CI -0.08 to 4.33)
+at the last visit with an associated p-value of 0.058.
+Per construction of the delta-adjustment, the point estimate is identical to the frequentist analysis. However, its standard error is much larger (1.12 vs. 0.86).
+Indeed, the information-anchored standard error (and the resulting inference) is very similar to the results for Baysesian multiple imputation using Rubin’s rules for which a standard error of 1.13 was reported in the quickstart vignette (vignette(topic = "quickstart", package = "rbmi").
+Of note, as shown e.g. in Wolbers et al. (2022), hypothesis testing based on the information-anchored inference is very conservative, i.e. the actual type I error is much lower than the nominal value. Hence, confidence intervals and \(p\)-values based on information-anchored inference should be interpreted with caution.
+
+
+
+
References
+
+
+
+Bartlett, Jonathan W. 2023. “Reference-Based Multiple Imputation - What Is the Right Variance and How to Estimate It.”Statistics in Biopharmaceutical Research 15 (1): 178–86.
+
+
+Cro, Suzie, James R Carpenter, and Michael G Kenward. 2019. “Information-Anchored Sensitivity Analysis: Theory and Application.”Journal of the Royal Statistical Society: Series A (Statistics in Society) 182 (2): 623–45.
+
+
+Lu, Kaifeng. 2021. “An Alternative Implementation of Reference-Based Controlled Imputation Procedures.”Statistics in Biopharmaceutical Research 13 (4): 483–91.
+
+
+Wolbers, Marcel, Alessandro Noci, Paul Delmar, Craig Gower-Page, Sean Yiu, and Jonathan W Bartlett. 2022. “Standard and Reference-Based Conditional Mean Imputation.”Pharmaceutical Statistics 21 (6): 1246–57.
+
This document provides answers to common questions about the rbmi package.
+It is intended to be read after the rbmi: Quickstart vignette.
+
+
+
+1.1 Is rbmi validated?
+
+
With regards to software in the pharmaceutical industry, validation is the act of ensuring that the software meets the needs and
+requirements of users given the conditions of actual use. The FDA provides general principles and
+guidance for validation but leaves it to individual sponsors to define their specific validation
+processes. Therefore, no individual R package can claim to be ‘validated’ independently, as
+validation depends on the entire software stack and the specific processes of each company.
+
That being said, some of the core components of any validation process are the design specification
+(what is the software supposed to do) as well as the testing / test results that demonstrate that
+the design specification has been met. For rbmi, the design specification is documented extensively,
+both at a macro level in vignettes and literature publications, and at a micro level in detailed
+function manuals. This is supported by our extensive suite of unit and integration tests, which
+ensure the software consistently produces correct output across a wide range of input scenarios.
+
This documentation and test coverage enable rbmi to be easily installed and integrated into any
+R system, in alignment with the system’s broader validation process.
+
+
+
+
+1.2 How do the methods in rbmi compare to the mixed model for repeated measures (MMRM) implemented in the mmrm package?
+
+
rbmi was designed to complement and, occasionally, replace standard MMRM analyses for clinical trials with longitudinal endpoints.
+
Strengths of rbmi compared to the standard MMRM model are:
+
+
+rbmi was designed to allow for analyses which are fully aligned with the the estimand definition. To facilitate this, it implements methods under a range of different missing data assumptions including standard missing-at-random (MAR), extended MAR (via inclusion of time-varying covariates), reference-based missingness, and not missing-at-random at random (NMAR; via \(\delta\)-adjustments). In contrast, the standard MMRM model is only valid under a standard MAR assumption which is not always plausible. For example, the standard MAR assumption is rather implausible for implementing a treatment policy strategy for the intercurrent event “treatment discontinuation” if a substantial proportion of subjects are lost-to-follow-up after discontinuation.
+
The \(\delta\)-adjustment methods implemented in rbmi can be used for sensitivity analyses of a primary MMRM- or rbmi-type analysis.
+
+
Weaknesses of rbmi compared to the standard MMRM model are:
+
+
MMRM models have been the de-facto standard analysis method for more than a decade. rbmi is currently less established.
+
+rbmi is computationally more intensive and using it requires more careful planning.
+
+
+
+
+
+1.3 How does rbmi compare to general-purpose software for multiple imputation (MI) such as mice?
+
+
rbmi covers only “MMRM-type” settings, i.e. settings with a single longitudinal continuous outcome which may be missing at some visits and hence require imputation.
+
For these settings, it has several advantages over general-purpose MI software:
+
+
+rbmi supports imputation under a range of different missing data assumptions whereas general-purpose MI software is mostly focused on MAR-based imputation. In particular, it is unclear how to implement jump to reference (JR) or copy increments in reference (CIR) methods with such software.
+
The rbmi interface is fully streamlined to this setting which arguably makes the implementation more straightforward than for general-purpose MI software.
+
The MICE algorithm is stochastic and inference is always based on Rubin’s rules. In contrast, method “conditional mean imputation plus jackknifing” (method="method_condmean(type = "jackknife")") in rbmi does not require any tuning parameters, is fully deterministic, and provides frequentist-consistent inference also for reference-based imputations (where Rubin’s rule is very conservative leading to actual type I error rates which can be far below their nominal values).
+
+
However, rbmi is much more limited in its functionality than general-purpose MI software.
+
+
+
+
+1.4 How to handle missing data in baseline covariates in rbmi?
+
+
rbmi does not support imputation of missing baseline covariates. Therefore, missing baseline covariates need to be handled outside of rbmi.
+The best approach for handling missing baseline covariates needs to be made on a case-by-case basis but in the context of randomized trials, relatively simple approach are often sufficient (White and Thompson (2005)).
+
+
+
+
+1.5 Why does rbmi by default use an ANCOVA analysis model and not an MMRM analysis model?
+
+
The theoretical justification for the conditional mean imputation method requires that the analysis model leads to a point estimator which is a linear function of the outcome vector (Wolbers et al. (2022)). This is the case for ANCOVA but not for general MMRM models. For the other imputation methods, both ANCOVA and MMRM are valid analysis methods. An MMRM analysis model could be implemented by providing a custom analysis function to the analyse() function.
+
For further expalanations, we also cite the end of section 2.4 of the conditional mean imputation paper (Wolbers et al. (2022)):
+
+
The proof relies on the fact that the ANCOVA estimator is a linear function of the outcome vector.
+For complete data, the ANCOVA estimator leads to identical parameter estimates as an MMRM model of all longitudinal outcomes with an arbitrary common covariance structure across treatment groups if treatment-by-visit interactions as well as covariate-by-visit-interactions are included in the analysis model for all covariates,17 (p. 197).
+Hence, the same proof also applies to such MMRM models.
+We expect that conditional mean imputation is also valid if a general MMRM model is used for the analysis but more involved argument would be required to formally justify this.
+
+
+
+
+
+1.6 How can I analyse the change-from-baseline in the analysis model when imputation was done on the original outcomes?
+
+
This can be achieved using custom analysis functions as outlined in Section 7 of the Advanced Vignette. e.g.
+White, Ian R, and Simon G Thompson. 2005. “Adjusting for Partially Missing Baseline Measurements in Randomized Trials.”Statistics in Medicine 24 (7): 993–1007.
+
+
+Wolbers, Marcel, Alessandro Noci, Paul Delmar, Craig Gower-Page, Sean Yiu, and Jonathan W Bartlett. 2022. “Standard and Reference-Based Conditional Mean Imputation.”Pharmaceutical Statistics 21 (6): 1246–57.
+
The purpose of this vignette is to provide an overview of some more advanced features of the rbmi package.
+The sections of the vignette are relatively self-contained, i.e. readers should be able to jump directly to the section which covers the functionality that they are most interested in.
+
+
+
+2 Data simulation using function simulate_data()
+
+
In order to demonstrate the advanced functions we will first create a simulated dataset with the rbmi function simulate_data().
+The simulate_data() function generates data from a randomized clinical trial with longitudinal continuous outcomes and up to two different types of intercurrent events (ICEs).
+One intercurrent event (ICE1) may be thought of as a discontinuation from study treatment due to study drug or condition related (SDCR) reasons.
+The other event (ICE2) may be thought of as discontinuation from study treatment due to not study drug or condition related (NSDCR) reasons.
+For the purpose of this vignette, we simulate data similarly to the simulation study reported in Wolbers et al. (2022) (though we change some of the simulation parameters) and include only one ICE type (ICE1).
+
Specifically, we simulate a 1:1 randomized trial of an active drug (intervention) versus placebo (control) with 100 subjects per group and 6 post-baseline assessments (bi-monthly visits until 12 months) under the following assumptions:
+
+
The mean outcome trajectory in the placebo group increases linearly from 50 at baseline (visit 0) to 60 at visit 6, i.e. the slope is 10 points/year.
+
The mean outcome trajectory in the intervention group is identical to the placebo group up to visit 2. From visit 2 onward, the slope decreases by 50% to 5 points/year.
+
The covariance structure of the baseline and follow-up values in both groups is implied by a random intercept and slope model with a standard deviation of 5 for both the intercept and the slope, and a correlation of 0.25. In addition, an independent residual error with standard deviation 2.5 is added to each assessment.
+
+
The probability of study drug discontinuation after each visit is calculated according to a logistic model which depends on the observed outcome at that visit. Specifically, a visit-wise discontinuation probability of 2% and 3% in the control and intervention group, respectively, is specified in case the observed outcome is equal to 50 (the mean value at baseline). The odds of a discontinuation is simulated to increase by +10% for each +1 point increase of the observed outcome.
+
Study drug discontinuation is simulated to have no effect on the mean trajectory in the placebo group. In the intervention group, subjects who discontinue follow the slope of the mean trajectory from the placebo group from that time point onward. This is compatible with a copy increments in reference (CIR) assumption.
+
Study drop-out at the study drug discontinuation visit occurs with a probability of 50% leading to missing outcome data from that time point onward.
+pars_c: The simulation parameters of the control group
+
+pars_t: The simulation parameters of the intervention group
+
+post_ice1_traj: Specifies how observed outcomes after ICE1 are simulated
+
+
Below, we report how data according to the specifications above can be simulated with function simulate_data():
+
+library(rbmi)
+library(dplyr)
+library(ggplot2)
+library(purrr)
+
+set.seed(122)
+
+n<-100
+time<-c(0, 2, 4, 6, 8, 10, 12)
+
+# Mean trajectory control
+muC<-c(50.0, 51.66667, 53.33333, 55.0, 56.66667, 58.33333, 60.0)
+
+# Mean trajectory intervention
+muT<-c(50.0, 51.66667, 53.33333, 54.16667, 55.0, 55.83333, 56.66667)
+
+# Create Sigma
+sd_error<-2.5
+covRE<-rbind(
+c(25.0, 6.25),
+c(6.25, 25.0)
+)
+
+Sigma<-cbind(1, time/12)%*%covRE%*%rbind(1, time/12)+diag(sd_error^2, nrow =length(time))
+
+# Set probability of discontinuation
+probDisc_C<-0.02
+probDisc_T<-0.03
+or_outcome<-1.10# +1 point increase => +10% odds of discontinuation
+
+# Set drop-out rate following discontinuation
+prob_dropout<-0.5
+
+# Set simulation parameters of the control group
+parsC<-set_simul_pars(
+ mu =muC,
+ sigma =Sigma,
+ n =n,
+ prob_ice1 =probDisc_C,
+ or_outcome_ice1 =or_outcome,
+ prob_post_ice1_dropout =prob_dropout
+)
+
+# Set simulation parameters of the intervention group
+parsT<-parsC
+parsT$mu<-muT
+parsT$prob_ice1<-probDisc_T
+
+# Set assumption about post-ice trajectory
+post_ice_traj<-"CIR"
+
+# Simulate data
+data<-simulate_data(
+ pars_c =parsC,
+ pars_t =parsT,
+ post_ice1_traj =post_ice_traj
+)
+
+head(data)
+#> id visit group outcome_bl outcome_noICE ind_ice1 ind_ice2 dropout_ice1
+#> 1 id_1 0 Control 57.32704 57.32704 0 0 0
+#> 2 id_1 1 Control 57.32704 54.69751 1 0 1
+#> 3 id_1 2 Control 57.32704 58.60702 1 0 1
+#> 4 id_1 3 Control 57.32704 61.50119 1 0 1
+#> 5 id_1 4 Control 57.32704 56.68363 1 0 1
+#> 6 id_1 5 Control 57.32704 66.14799 1 0 1
+#> outcome
+#> 1 57.32704
+#> 2 NA
+#> 3 NA
+#> 4 NA
+#> 5 NA
+#> 6 NA
+
+# As a simple descriptive of the simulated data, summarize the number of subjects with ICEs and missing data
+data%>%
+group_by(id)%>%
+summarise(
+ group =group[1],
+ any_ICE =(any(ind_ice1==1)),
+ any_NA =any(is.na(outcome)))%>%
+group_by(group)%>%
+summarise(
+ subjects_with_ICE =sum(any_ICE),
+ subjects_with_missings =sum(any_NA)
+)
+#> # A tibble: 2 × 3
+#> group subjects_with_ICE subjects_with_missings
+#> <fct><int><int>
+#> 1 Control 18 8
+#> 2 Intervention 25 14
+
+
+
+3 Handling of observed post-ICE data in rbmi under reference-based imputation
+
+
rbmi always uses all non-missing outcome data from the input data set, i.e. such data are never overwritten during the imputation step or removed from the analysis step. This implies that if there are data which are considered to be irrelevant for treatment effect estimation (e.g. data after an ICE for which the estimand specified a hypothetical strategy), then such data need to be removed from the input data set by the user prior to calling the rbmi functions.
+
For imputation under a missing at random (MAR) strategy, all observed outcome data is also included in the fitting of the base imputation model. However, for ICEs handled using reference-based imputation methods (such as CIR, CR, and JR), rbmi excludes observed post-ICE data from the base imputation model. If these data were not excluded, then the base imputation model would mistakenly estimate mean trajectories based on a mixture of observed pre- and post-ICE data which are not relevant for reference-based imputations. However, any observed post-ICE data are added back into the data set after the fitting of the base imputation model and included as is in the subsequent imputation and analysis steps.
+
Post-ICE data in the control or reference group are also excluded from the base imputation model if the user specifies a reference-based imputation strategy for such ICEs. This ensures that an ICE has the same impact on the data included in the base imputation model regardless whether the ICE occurred in the control or the intervention group. On the other hand, imputation in the reference group is based on a MAR assumption even for reference-based imputation methods and it may be preferable in some settings to include such post-ICE data from the control group in the base imputation model. This can be implemented by specifying a MAR strategy for the ICE in the control group and a reference-based strategy for the same ICE in the intervention group. We will use this latter approach in our example below.
+
The simulated trial data from section 2 assumed that outcomes in the intervention group observed after the ICE “treatment discontinuation” follow the increments observed in the control group. Thus the imputation of missing data in the intervention group after treatment discontinuation might be performed under a reference-based copy increments in reference (CIR) assumption.
+
Specifically, we implement an estimator under the following assumptions:
+
+
The endpoint of interest is the change in the outcome from baseline at each visit.
+
The imputation model includes the treatment group, the (categorical) visit, treatment-by-visit interactions, the baseline outcome, and baseline outcome-by-visit interactions as covariates.
+
The imputation model assumes a common unstructured covariance matrix in both treatment groups
+
In the control group, all missing data are imputed under MAR whereas in the intervention group, missing post-ICE data are imputed under a CIR assumption
+
The analysis model of the endpoint in the imputed datasets is a separate ANCOVA model for each visit with the treatment group as the primary covariate and adjustment for the baseline outcome value.
+
+
For illustration purposes, we chose MI based on approximate Bayesian posterior draws with 20 random imputations which is not very demanding from a computational perspective. In practical applications, the number of random imputations may need to be increased. Moreover, other imputations are also supported in rbmi. For guidance regarding the choice of the imputation approach, we refer the user to a comparison between all implemented approaches in Section 3.9 of the “Statistical Specifications” vignette (vignette("stat_specs", package = "rbmi")).
+
We first report the code to set the variables of the imputation and analysis models. If you are not yet familiar with the syntax, we recommend that you first check the “quickstart” vignette (vignette("quickstart", package = "rbmi")).
+
+# Create data_ice including the subject's first visit affected by the ICE and the imputation strategy
+# Imputation strategy for post-ICE data is CIR in the intervention group and MAR for the control group
+# (note that ICEs which are handled using MAR are optional and do not impact the analysis
+# because imputation of missing data under MAR is the default)
+data_ice_CIR<-data%>%
+group_by(id)%>%
+filter(ind_ice1==1)%>%# select visits with ICEs
+mutate(strategy =ifelse(group=="Intervention", "CIR", "MAR"))%>%
+summarise(
+ visit =visit[1], # Select first visit affected by the ICE
+ strategy =strategy[1]
+)
+
+# Compute endpoint of interest: change from baseline and
+# remove rows corresponding to baseline visits
+data<-data%>%
+filter(visit!=0)%>%
+mutate(
+ change =outcome-outcome_bl,
+ visit =factor(visit, levels =unique(visit))
+)
+
+# Define key variables for the imputation and analysis models
+vars<-set_vars(
+ subjid ="id",
+ visit ="visit",
+ outcome ="change",
+ group ="group",
+ covariates =c("visit*outcome_bl", "visit*group"),
+ strategy ="strategy"
+)
+
+vars_an<-vars
+vars_an$covariates<-"outcome_bl"
+
The chosen imputation method can be set with the function method_approxbayes() as follows:
We can now sequentially call the 4 key functions of rbmi to perform the multiple imputation. Please note that the management of observed post-ICE data is performed without additional complexity for the user. draws() automatically excludes post-ICE data handled with a reference-based method (but keeps post-ICE data handled using MAR) using information provided by the argument data_ice. impute() will impute only truly missing data in data[[vars$outcome]].
This last output gives an estimated difference of
+-4.537 (95% CI -6.420 to -2.655)
+between the two groups at the last visit with an associated p-value lower than 0.001.
The draws() function is by far the most computationally intensive function in rbmi.
+In some settings, it may be important to explore the impact of a change in the
+reference-based imputation strategy on the results.
+Such a change does not affect the imputation model but it does
+affect the subsequent imputation step.
+In order to allow changes in the imputation strategy without having to re-run the
+draws() function, the function impute() has an additional argument update_strategies.
+
However, please note that this functionality comes with some important limitations:
+As described at the beginning of Section 3, post-ICE outcomes are included in the input dataset for the base imputation model if the imputation method is MAR but they are excluded for reference-based imputation methods (such as CIR, CR, and JR).
+Therefore, updata_strategies cannot be applied if the imputation strategy is changed from a MAR to a non-MAR strategy in the presence of observed post-ICE outcomes. Similarly, a change from a non-MAR strategy to MAR triggers a warning in the presence of observed post-ICE outcomes because the base imputation model was not fitted to all relevant data under MAR.
+Finally, update_strategies cannot be applied if the timing of any of the ICEs is changed (in argument data_ice) in addition to the imputation strategy.
+
As an example, we described an analysis under a copy increments in reference (CIR) assumption in the previous section. Let’s assume we want to change this strategy to a jump to reference imputation strategy for a sensitivity analysis. This can be efficiently implemented using update_strategies as follows:
For imputations under a jump to reference assumption, we get an estimated difference of
+-4.360 (95% CI -6.238 to -2.482)
+between the two groups at the last visit with an associated p-value of
+<0.001.
+
+
+
+5 Imputation under MAR with time-varying covariates
+
+
The rbmi package supports the inclusion of time-varying covariates in the imputation model. This is particularly useful for implementing so-called retrieved dropout models.
+The vignette “Implementation of retrieved-dropout models using rbmi” (vignette(topic = "retrieved_dropout", package = "rbmi")) contains examples of such models.
+
+
+
+6 Custom imputation strategies
+
+
The following imputation strategies are implemented in rbmi:
+
+
Missing at Random (MAR)
+
Jump to Reference (JR)
+
Copy Reference (CR)
+
Copy Increments in Reference (CIR)
+
Last Mean Carried Forward (LMCF)
+
+
In addition, rbmi allows the user to implement their own imputation strategy.
+To do this, the user needs to do three things:
+
+
Define a function implementing the new imputation strategy.
+
Specify which patients use this strategy in the data_ice dataset provided to draws().
+
Provide the imputation strategy function to impute().
+
+
The imputation strategy function must take 3 arguments (pars_group, pars_ref, and index_mar) and calculates the mean and covariance matrix of the subject’s marginal imputation distribution which will then be applied to subjects to which the strategy applies.
+Here, pars_group contains the predicted mean trajectory (pars_group$mu, a numeric vector) and covariance matrix (pars_group$sigma) for a subject conditional on their assigned treatment group and covariates.
+pars_ref contains the corresponding mean trajectory and covariance matrix conditional on the reference group and the subject’s covariates.
+index_mar is a logical vector which specifies for each visit whether the visit is unaffected by an ICE handled using a non-MAR method or not.
+As an example, the user can check how the CIR strategy was implemented by looking at function strategy_CIR().
To further illustrate this for a simple example, assume that a new strategy is to be implemented as follows:
+- The marginal mean of the imputation distribution is equal to the marginal mean trajectory for the subject according to their assigned group and covariates up to the ICE.
+- After the ICE the marginal mean of the imputation distribution is equal to the average of the visit-wise marginal means based on the subjects covariates and the assigned group or the reference group, respectively.
+- For the covariance matrix of the marginal imputation distribution, the covariance matrix from the assigned group is taken.
+
To do this, we first need to define the imputation function which for this example could be coded as follows:
To incorporate this into rbmi, data_ice needs to be updated such that the strategy AVG is specified for visits affected by the ICE. Additionally, the function needs
+to be provided to impute() via the getStrategies() function as shown below:
Then, the analysis could proceed by calling analyse() and pool() as before.
+
+
+
+7 Custom analysis functions
+
+
By default rbmi will analyse the data by using the ancova() function.
+This analysis function fits an ANCOVA model to the outcomes from each visit separately,
+and returns the “treatment effect” estimate as well as the corresponding least square means
+for each group. If the user wants to perform a different analysis, or return different
+statistics from the analysis, then this can be done by using a custom analysis function.
+Beware that the validity of the conditional mean imputation method has only been formally established for analysis functions corresponding to linear models (such as ANCOVA) and caution is
+required when applying alternative analysis functions for this method.
+
The custom analysis function must take a data.frame as its
+first argument and return a named list with each element itself being a list
+containing at a minimum a point estimate, called est.
+For method method_bayes() or method_approxbayes(), the list must additionally contain a
+standard error (element se) and, if available, the degrees of freedom of the complete-data analysis model (element df).
+
As a simple example, we replicate the ANCOVA analysis at the last visit for the CIR-based imputations with a user-defined analysis function below:
+
+compare_change_lastvisit<-function(data, ...){
+fit<-lm(change~group+outcome_bl, data =data, subset =(visit==6))
+res<-list(
+ trt =list(
+ est =coef(fit)["groupIntervention"],
+ se =sqrt(vcov(fit)["groupIntervention", "groupIntervention"]),
+ df =df.residual(fit)
+)
+)
+return(res)
+}
+
+ana_obj_CIR6<-analyse(
+impute_obj_CIR,
+ fun =compare_change_lastvisit,
+ vars =vars_an
+)
+
+pool(ana_obj_CIR6)
+#>
+#> Pool Object
+#> -----------
+#> Number of Results Combined: 20
+#> Method: rubin
+#> Confidence Level: 0.95
+#> Alternative: two.sided
+#>
+#> Results:
+#>
+#> =================================================
+#> parameter est se lci uci pval
+#> -------------------------------------------------
+#> trt -4.537 0.954 -6.42 -2.655 <0.001
+#> -------------------------------------------------
+
As a second example, assume that for a supplementary analysis the user wants to compare the proportion of subjects with a change from baseline of >10 points at the last
+visit between the treatment groups with the baseline outcome as an additional covariate. This could lead to the following basic analysis function:
+
+compare_prop_lastvisit<-function(data, ...){
+fit<-glm(
+I(change>10)~group+outcome_bl,
+ family =binomial(),
+ data =data,
+ subset =(visit==6)
+)
+res<-list(
+ trt =list(
+ est =coef(fit)["groupIntervention"],
+ se =sqrt(vcov(fit)["groupIntervention", "groupIntervention"]),
+ df =NA
+)
+)
+return(res)
+}
+
+ana_obj_prop<-analyse(
+impute_obj_CIR,
+ fun =compare_prop_lastvisit,
+ vars =vars_an
+)
+
+pool_obj_prop<-pool(ana_obj_prop)
+pool_obj_prop
+#>
+#> Pool Object
+#> -----------
+#> Number of Results Combined: 20
+#> Method: rubin
+#> Confidence Level: 0.95
+#> Alternative: two.sided
+#>
+#> Results:
+#>
+#> =================================================
+#> parameter est se lci uci pval
+#> -------------------------------------------------
+#> trt -1.052 0.314 -1.667 -0.438 0.001
+#> -------------------------------------------------
+
+tmp<-as.data.frame(pool_obj_prop)%>%
+mutate(
+ OR =exp(est),
+ OR.lci =exp(lci),
+ OR.uci =exp(uci)
+)%>%
+select(parameter, OR, OR.lci, OR.uci)
+tmp
+#> parameter OR OR.lci OR.uci
+#> 1 trt 0.3491078 0.188807 0.6455073
+
Note that if the user wants rbmi to use a normal approximation to the pooled test statistics, then the degrees of freedom need to be set to df = NA (as per the above example). If the degrees of freedom of the complete data test statistics are known or if the degrees of freedom are set to df = Inf, then rbmi pools the degrees of freedom across imputed datasets according to the rule by Barnard and Rubin (see the “Statistical Specifications” vignette (vignette("stat_specs", package = "rbmi") for details). According to this rule, infinite degrees of freedom for the complete data analysis do not imply that the pooled degrees of freedom are also infinite.
+Rather, in this case the pooled degrees of freedom are (M-1)/lambda^2, where M is the number of imputations and lambda is the fraction of missing information (see Barnard and Rubin (1999) for details).
+
+
+
+8 Sensitivity analyses: Delta adjustments and tipping point analyses
+
+
Delta-adjustments are used to impute missing data under a not missing at random (NMAR) assumption. This reflects the belief that unobserved outcomes would have been systematically “worse” (or “better”) than “comparable” observed outcomes. For an extensive discussion of delta-adjustment methods, we refer to Cro et al. (2020).
+
In rbmi, a marginal delta-adjustment approach is implemented. This means that the delta-adjustment is applied to the dataset after data imputation under MAR or reference-based missing data assumptions and prior to the analysis of the imputed data.
+Sensitivity analysis using delta-adjustments can therefore be performed without having to re-fit the imputation model. In rbmi, they are implemented via the delta argument of the analyse() function.
+
+
+8.1 Simple delta adjustments and tipping point analyses
+
+
The delta argument of analyse() allows users to modify the outcome variable prior to the analysis.
+To do this, the user needs to provide a data.frame which contains columns for the subject and visit (to identify the observation to be adjusted) plus an additional column called delta which specifies the value which will be added to the outcomes prior to the analysis.
+
The delta_template() function supports the user in creating this data.frame: it creates a skeleton data.frame containing one row per subject and visit with the value of delta set to 0 for all observations:
+
+dat_delta<-delta_template(imputations =impute_obj_CIR)
+head(dat_delta)
+#> id visit group is_mar is_missing is_post_ice strategy delta
+#> 1 id_1 1 Control TRUE TRUE TRUE MAR 0
+#> 2 id_1 2 Control TRUE TRUE TRUE MAR 0
+#> 3 id_1 3 Control TRUE TRUE TRUE MAR 0
+#> 4 id_1 4 Control TRUE TRUE TRUE MAR 0
+#> 5 id_1 5 Control TRUE TRUE TRUE MAR 0
+#> 6 id_1 6 Control TRUE TRUE TRUE MAR 0
+
Note that the output of delta_template() contains additional information which can be used to properly re-set variable delta.
+
For example, assume that the user wants to implement a delta-adjustment to the imputed values under CIR described in section 3.
+Specifically, assume that a fixed “worsening adjustment” of +5 points is applied to all imputed values regardless of the treatment group. This could be programmed as follows:
The same approach can be used to implement a tipping point analysis. Here, we apply different delta-adjustments to imputed data from the control and the intervention group, respectively. Assume that delta-adjustments by less then -5 points or by more than +15 points are considered implausible from a clinical perspective. Therefore, we vary the delta-values in each group between -5 to +15 points to investigate which delta combinations lead to a “tipping” of the primary analysis result, defined here as an analysis p-value \(\geq 0.05\).
+
+
+
+
+perform_tipp_analysis<-function(delta_control, delta_intervention, cl){
+
+# Derive delta offset based on control and intervention specific deltas
+delta_df<-delta_df_init%>%
+mutate(
+ delta_ctl =(group=="Control")*is_missing*delta_control,
+ delta_int =(group=="Intervention")*is_missing*delta_intervention,
+ delta =delta_ctl+delta_int
+)
+
+ana_delta<-analyse(
+impute_obj_CIR,
+ fun =compare_change_lastvisit,
+ vars =vars_an,
+ delta =delta_df,
+ ncores =cl
+)
+
+pool_delta<-as.data.frame(pool(ana_delta))
+
+list(
+ trt_effect_6 =pool_delta[["est"]],
+ pval_6 =pool_delta[["pval"]]
+)
+}
+
+# Get initial delta template
+delta_df_init<-delta_template(impute_obj_CIR)
+
+tipp_frame_grid<-expand.grid(
+ delta_control =seq(-5, 15, by =2),
+ delta_intervention =seq(-5, 15, by =2)
+)%>%
+as_tibble()
+
+# parallelise to speed up computation
+cl<-make_rbmi_cluster(2)
+
+tipp_frame<-tipp_frame_grid%>%
+mutate(
+ results_list =map2(delta_control, delta_intervention, perform_tipp_analysis, cl =cl),
+ trt_effect_6 =map_dbl(results_list, "trt_effect_6"),
+ pval_6 =map_dbl(results_list, "pval_6")
+)%>%
+select(-results_list)%>%
+mutate(
+ pval =cut(
+pval_6,
+c(0, 0.001, 0.01, 0.05, 0.2, 1),
+ right =FALSE,
+ labels =c("<0.001", "0.001 - <0.01", "0.01- <0.05", "0.05 - <0.20", ">= 0.20")
+)
+)
+
+# Close cluster when done with it
+parallel::stopCluster(cl)
+
+# Show delta values which lead to non-significant analysis results
+tipp_frame%>%
+filter(pval_6>=0.05)
+#> # A tibble: 3 × 5
+#> delta_control delta_intervention trt_effect_6 pval_6 pval
+#> <dbl><dbl><dbl><dbl><fct>
+#> 1 -5 15 -1.99 0.0935 0.05 - <0.20
+#> 2 -3 15 -2.15 0.0704 0.05 - <0.20
+#> 3 -1 15 -2.31 0.0527 0.05 - <0.20
+
+ggplot(tipp_frame, aes(delta_control, delta_intervention, fill =pval))+
+geom_raster()+
+scale_fill_manual(values =c("darkgreen", "lightgreen", "lightyellow", "orange", "red"))
+
+
According to this analysis, the significant test result from the primary analysis under CIR could only be tipped to a non-significant result for rather extreme delta-adjustments. Please note that for a real analysis it is recommended to use a smaller step size in the grid than what has been used here.
+
+
+
+8.2 More flexible delta-adjustments using the dlag and delta arguments of delta_template()
+
+
So far, we have only discussed simple delta arguments which add the same value to all imputed values.
+However, the user may want to apply more flexible delta-adjustments to missing values after an intercurrent event (ICE) and vary the magnitude of the delta adjustment depending on the how far away the visit in question is from the ICE visit.
+
To facilitate the creation of such flexible delta-adjustments, the delta_template() function has two optional additional arguments delta
+and dlag. The delta argument specifies the default amount of delta
+that should be applied to each post-ICE visit, whilst
+dlag specifies the scaling coefficient to be applied based upon the visits proximity
+to the first visit affected by the ICE. By default, the delta will only be added to unobserved (i.e. imputed) post-ICE
+outcomes but this can be changed by setting the optional argument missing_only = FALSE.
+
The usage of the delta and dlag arguments is best illustrated with a few examples:
+
Assume a setting with 4 visits and that the user specified delta = c(5,6,7,8) and dlag=c(1,2,3,4).
+
For a subject for whom the first visit affected by the ICE is visit 2, these values of delta and dlag would imply the following delta offset:
+
v1 v2 v3 v4
+--------------
+ 5 6 7 8 # delta assigned to each visit
+ 0 1 2 3 # scaling starting from the first visit after the subjects ICE
+--------------
+ 0 6 14 24 # delta * scaling
+--------------
+ 0 6 20 44 # cumulative sum (i.e. delta) to be applied to each visit
+
That is, the subject would have a delta offset of 0 applied to visit v1, 6 for visit v2, 20 for visit v3 and 44 for visit v4.
+
Assume instead, that the subject’s first visit affected by the ICE was visit 3. Then, the above values of delta and dlag would imply the following delta offset:
+
v1 v2 v3 v4
+--------------
+ 5 6 7 8 # delta assigned to each visit
+ 0 0 1 2 # scaling starting from the first visit after the subjects ICE
+--------------
+ 0 0 7 16 # delta * scaling
+--------------
+ 0 0 7 23 # cumulative sum (i.e. delta) to be applied to each visit
+
To apply a constant delta value of +5 to all visits affected by the ICE
+regardless of their proximity to the first ICE visit, one could set delta = c(5,5,5,5) and dlag = c(1,0,0,0).
+Alternatively, it may be more straightforward for this setting to call the delta_template() function without the delta and dlag arguments and then overwrite the delta column of the resulting data.frame as described in the previous section (and additionally relying on the is_post_ice variable).
+
Another way of using these arguments is to set delta to the difference in time
+between visits and dlag to be the amount of delta per unit of time. For example,
+let’s say that visits occur on weeks 1, 5, 6 and 9 and that we want a delta of 3
+to be applied for each week after an ICE.
+For simplicity, we assume that the ICE occurs immediately after the subject’s last visit which
+is not affected by the ICE. This this could be achieved by setting
+delta = c(1,4,1,3) (the difference in weeks between each visit) and dlag = c(3, 3, 3, 3).
+
Assume a subject’s first visit affected by the ICE was visit v2, then these values of delta and dlag would imply the following delta offsets:
+
v1 v2 v3 v4
+--------------
+ 1 4 1 3 # delta assigned to each visit
+ 0 3 3 3 # scaling starting from the first visit after the subjects ICE
+--------------
+ 0 12 3 9 # delta * scaling
+--------------
+ 0 12 15 24 # cumulative sum (i.e. delta) to be applied to each visit
+
To wrap up, we show this in action for our simulated dataset from section 2 and the imputed datasets
+based on a CIR assumption from section 3.
+The simulation setting specified follow-up visits at months 2, 4, 6, 8, 10, and 12.
+Assume that we want to apply a delta-adjustment of 1 for every month after an ICE to unobserved post-ICE visits from the intervention group only. (E.g. if the ICE occurred immediately after the month 4 visit, then the total delta applied to a missing value from the month 10 visit would be 6.)
+
To program this, we first use the delta and dlag arguments of delta_template() to set up a corresponding template data.frame:
+
+delta_df<-delta_template(
+impute_obj_CIR,
+ delta =c(2, 2, 2, 2, 2, 2),
+ dlag =c(1, 1, 1, 1, 1, 1)
+)
+
+head(delta_df)
+#> id visit group is_mar is_missing is_post_ice strategy delta
+#> 1 id_1 1 Control TRUE TRUE TRUE MAR 2
+#> 2 id_1 2 Control TRUE TRUE TRUE MAR 4
+#> 3 id_1 3 Control TRUE TRUE TRUE MAR 6
+#> 4 id_1 4 Control TRUE TRUE TRUE MAR 8
+#> 5 id_1 5 Control TRUE TRUE TRUE MAR 10
+#> 6 id_1 6 Control TRUE TRUE TRUE MAR 12
+
Next, we can use the additional metadata variables provided by delta_template() to manually
+reset the delta values for the control group back to 0:
+
+delta_df2<-delta_df%>%
+mutate(delta =if_else(group=="Control", 0, delta))
+
+head(delta_df2)
+#> id visit group is_mar is_missing is_post_ice strategy delta
+#> 1 id_1 1 Control TRUE TRUE TRUE MAR 0
+#> 2 id_1 2 Control TRUE TRUE TRUE MAR 0
+#> 3 id_1 3 Control TRUE TRUE TRUE MAR 0
+#> 4 id_1 4 Control TRUE TRUE TRUE MAR 0
+#> 5 id_1 5 Control TRUE TRUE TRUE MAR 0
+#> 6 id_1 6 Control TRUE TRUE TRUE MAR 0
+
Finally, we can use our delta data.frame to apply the desired delta offset to our analysis:
+Barnard, John, and Donald B Rubin. 1999. “Miscellanea. Small-Sample Degrees of Freedom with Multiple Imputation.”Biometrika 86 (4): 948–55.
+
+
+Cro, Suzie, Tim P Morris, Michael G Kenward, and James R Carpenter. 2020. “Sensitivity Analysis for Clinical Trials with Missing Continuous Outcome Data Using Controlled Multiple Imputation: A Practical Guide.”Statistics in Medicine 39 (21): 2815–42.
+
+
+Wolbers, Marcel, Alessandro Noci, Paul Delmar, Craig Gower-Page, Sean Yiu, and Jonathan W Bartlett. 2022. “Standard and Reference-Based Conditional Mean Imputation.”Pharmaceutical Statistics 21 (6): 1246–57.
+
+analyse() - analyses each of the multiple imputed datasets
+
+pool() - combines the analysis results across imputed datasets into a single statistic
+
+
This example in this vignette makes use of Bayesian multiuple imputation; this functionality
+requires the installation of the suggested package rstan.
We use a publicly available example dataset from an antidepressant clinical trial of an active drug versus placebo. The relevant endpoint is the Hamilton 17-item depression rating scale (HAMD17) which was assessed at baseline and at weeks 1, 2, 4, and 6. Study drug discontinuation occurred in 24% of subjects from the active drug and 26% of subjects from placebo. All data after study drug discontinuation are missing and there is a single additional intermittent missing observation.
+
+library(rbmi)
+library(dplyr)
+#>
+#> Attaching package: 'dplyr'
+#> The following objects are masked from 'package:stats':
+#>
+#> filter, lag
+#> The following objects are masked from 'package:base':
+#>
+#> intersect, setdiff, setequal, union
+
+data("antidepressant_data")
+dat<-antidepressant_data
+
We consider an imputation model with the mean change from baseline in the HAMD17 score as the outcome (variable CHANGE in the dataset). The following covariates are included in the imputation model: the treatment group (THERAPY), the (categorical) visit (VISIT), treatment-by-visit interactions, the baseline HAMD17 score (BASVAL), and baseline HAMD17 score-by-visit interactions. A common unstructured covariance matrix structure is assumed for both groups. The analysis model is an ANCOVA model with the treatment group as the primary factor and adjustment for the baseline HAMD17 score.
+
rbmi expects its input dataset to be complete; that is, there must be one row per subject for each visit. Missing outcome values should be coded as NA, while missing covariate values are not allowed. If the dataset is incomplete, then the expand_locf() helper function can be used to add any missing rows, using LOCF imputation to carry forward the observed baseline covariate values to visits with missing outcomes. Rows corresponding to missing outcomes are not present in the antidepressant trial dataset. To address this we will therefore use the expand_locf() function as follows:
+
+
+# Use expand_locf to add rows corresponding to visits with missing outcomes to the dataset
+dat<-expand_locf(
+dat,
+ PATIENT =levels(dat$PATIENT), # expand by PATIENT and VISIT
+ VISIT =levels(dat$VISIT),
+ vars =c("BASVAL", "THERAPY"), # fill with LOCF BASVAL and THERAPY
+ group =c("PATIENT"),
+ order =c("PATIENT", "VISIT")
+)
+
+
+
+3 Draws
+
+
The draws() function fits the imputation models and stores the corresponding parameter estimates or Bayesian posterior parameter draws.
+The three main inputs to the draws() function are:
+
+
+data - The primary longitudinal data.frame containing the outcome variable and all covariates.
+
+data_ice - A data.frame which specifies the first visit affected by an intercurrent event (ICE) and the imputation strategy for handling missing outcome data after the ICE. At most one ICE which is to be imputed by a non-MAR strategy is allowed per subject.
+
+method - The statistical method used to fit the imputation models and to create imputed datasets.
+
+
For the antidepressant trial data, the dataset data_ice is not provided. However, it can be derived because, in this dataset,
+the subject’s first visit affected by the ICE “study drug discontinuation” corresponds to the first terminal missing observation.
+We first derive the dateset data_ice and then create 150 Bayesian posterior draws of the imputation model parameters.
+
For this example, we assume that the imputation strategy after the ICE is Jump To Reference (JR) for all subjects
+and that 150 multiple imputed datasets using Bayesian posterior draws from the imputation model are to be created.
+
+# create data_ice and set the imputation strategy to JR for
+# each patient with at least one missing observation
+dat_ice<-dat%>%
+arrange(PATIENT, VISIT)%>%
+filter(is.na(CHANGE))%>%
+group_by(PATIENT)%>%
+slice(1)%>%
+ungroup()%>%
+select(PATIENT, VISIT)%>%
+mutate(strategy ="JR")
+
+# In this dataset, subject 3618 has an intermittent missing values which does not correspond
+# to a study drug discontinuation. We therefore remove this subject from `dat_ice`.
+# (In the later imputation step, it will automatically be imputed under the default MAR assumption.)
+dat_ice<-dat_ice[-which(dat_ice$PATIENT==3618),]
+
+dat_ice
+#> # A tibble: 43 × 3
+#> PATIENT VISIT strategy
+#> <fct><fct><chr>
+#> 1 1513 5 JR
+#> 2 1514 5 JR
+#> 3 1517 5 JR
+#> 4 1804 7 JR
+#> 5 2104 7 JR
+#> 6 2118 5 JR
+#> 7 2218 6 JR
+#> 8 2230 6 JR
+#> 9 2721 5 JR
+#> 10 2729 5 JR
+#> # ℹ 33 more rows
+
+# Define the names of key variables in our dataset and
+# the covariates included in the imputation model using `set_vars()`
+# Note that the covariates argument can also include interaction terms
+vars<-set_vars(
+ outcome ="CHANGE",
+ visit ="VISIT",
+ subjid ="PATIENT",
+ group ="THERAPY",
+ covariates =c("BASVAL*VISIT", "THERAPY*VISIT")
+)
+
+# Define which imputation method to use (here: Bayesian multiple imputation with 150 imputed datsets)
+method<-method_bayes(
+ burn_in =200,
+ burn_between =5,
+ n_samples =150
+)
+
+# Create samples for the imputation parameters by running the draws() function
+set.seed(987)
+drawObj<-draws(
+ data =dat,
+ data_ice =dat_ice,
+ vars =vars,
+ method =method,
+ quiet =TRUE
+)
+drawObj
+#>
+#> Draws Object
+#> ------------
+#> Number of Samples: 150
+#> Number of Failed Samples: 0
+#> Model Formula: CHANGE ~ 1 + THERAPY + VISIT + BASVAL * VISIT + THERAPY * VISIT
+#> Imputation Type: random
+#> Method:
+#> name: Bayes
+#> burn_in: 200
+#> burn_between: 5
+#> same_cov: TRUE
+#> n_samples: 150
+
Note the use of set_vars() which specifies the names of the key variables
+within the dataset and the imputation model. Additionally, note that whilst vars$group and vars$visit
+are added as terms to the imputation model by default, their interaction is not,
+thus the inclusion of group * visit in the list of covariates.
The next step is to use the parameters from the imputation model to generate the imputed datasets. This is
+done via the impute() function. The function only has two key inputs: the imputation
+model output from draws() and the reference groups relevant to reference-based imputation methods. It’s usage is thus:
+
+imputeObj<-impute(
+drawObj,
+ references =c("DRUG"="PLACEBO", "PLACEBO"="PLACEBO")
+)
+imputeObj
+#>
+#> Imputation Object
+#> -----------------
+#> Number of Imputed Datasets: 150
+#> Fraction of Missing Data (Original Dataset):
+#> 4: 0%
+#> 5: 8%
+#> 6: 13%
+#> 7: 25%
+#> References:
+#> DRUG -> PLACEBO
+#> PLACEBO -> PLACEBO
+
In this instance, we are specifying that the PLACEBO group should be the reference group for itself as well as for the DRUG group (as is standard for imputation using reference-based methods).
+
Generally speaking, there is no need to see or directly interact with the imputed
+datasets. However, if you do wish to inspect them, they can be extracted from the imputation
+object using the extract_imputed_dfs() helper function, i.e.:
+
+imputed_dfs<-extract_imputed_dfs(imputeObj)
+head(imputed_dfs[[10]], 12)# first 12 rows of 10th imputed dataset
+#> PATIENT HAMATOTL PGIIMP RELDAYS VISIT THERAPY GENDER POOLINV BASVAL
+#> 1 new_pt_1 21 2 7 4 DRUG F 006 32
+#> 2 new_pt_1 19 2 14 5 DRUG F 006 32
+#> 3 new_pt_1 21 3 28 6 DRUG F 006 32
+#> 4 new_pt_1 17 4 42 7 DRUG F 006 32
+#> 5 new_pt_2 18 3 7 4 PLACEBO F 006 14
+#> 6 new_pt_2 18 2 15 5 PLACEBO F 006 14
+#> 7 new_pt_2 14 3 29 6 PLACEBO F 006 14
+#> 8 new_pt_2 8 2 42 7 PLACEBO F 006 14
+#> 9 new_pt_3 18 3 7 4 DRUG F 006 21
+#> 10 new_pt_3 17 3 14 5 DRUG F 006 21
+#> 11 new_pt_3 12 3 28 6 DRUG F 006 21
+#> 12 new_pt_3 9 3 44 7 DRUG F 006 21
+#> HAMDTL17 CHANGE
+#> 1 21 -11
+#> 2 20 -12
+#> 3 19 -13
+#> 4 17 -15
+#> 5 11 -3
+#> 6 14 0
+#> 7 9 -5
+#> 8 5 -9
+#> 9 20 -1
+#> 10 18 -3
+#> 11 16 -5
+#> 12 13 -8
+
Note that in the case of method_bayes() or method_approxbayes(), all imputed datasets correspond to random imputations on the original dataset.
+For method_condmean(), the first imputed dataset will always correspond to the completed original dataset containing all subjects.
+For method_condmean(type="jackknife"), the remaining datasets correspond to conditional mean imputations on leave-one-subject-out datasets,
+whereas for method_condmean(type="bootstrap"), each subsequent dataset corresponds to a conditional mean imputation on a bootstrapped datasets.
+For method_bmlmi(), all the imputed datasets correspond to sets of random imputations on bootstrapped datasets.
+
+
+
+5 Analyse
+
+
The next step is to run the analysis model on each imputed dataset. This is done by defining
+an analysis function and then calling analyse() to apply this function to each
+imputed dataset. For this vignette we use the ancova() function provided by the rbmi
+package which fits a separate ANCOVA model for the outcomes from each visit and returns a treatment
+effect estimate and corresponding least square means for each group per visit.
Note that, similar to draws(), the ancova() function uses the set_vars()
+function which determines the names of the key variables within the data and the covariates
+(in addition to the treatment group) for which the analysis model will be adjusted.
+
Please also note that the names of the analysis estimates contain “ref” and “alt” to refer to the two treatment arms. In particular “ref” refers to the first factor level of vars$group which does not necessarily
+coincide with the control arm. In this example, since levels(dat[[vars$group]]) = c("DRUG", PLACEBO), the results associated with “ref” correspond to the intervention arm, while those associated with “alt” correspond to the control arm.
+
Additionally, we can use the delta argument of analyse() to perform a delta adjustments of the imputed datasets prior to the analysis.
+In brief, this is implemented by specifying a data.frame that contains the amount
+of adjustment to be added to each longitudinal outcome for each subject and visit, i.e.
+the data.frame must contain the columns subjid, visit, and delta.
+
It is appreciated that carrying out this procedure is potentially tedious, therefore the
+delta_template() helper function has been provided to simplify it. In particular,
+delta_template() returns a shell data.frame where the delta-adjustment is set to 0 for all
+patients. Additionally delta_template() adds several meta-variables onto the shell
+data.frame which can be used for manual derivation or manipulation of the delta-adjustment.
+
For example lets say we want to add a delta-value of 5 to all imputed values (i.e. those values
+which were missing in the original dataset) in the drug arm. That could then be implemented as follows:
+
+# For reference show the additional meta variables provided
+delta_template(imputeObj)%>%as_tibble()
+#> # A tibble: 688 × 8
+#> PATIENT VISIT THERAPY is_mar is_missing is_post_ice strategy delta
+#> <fct><fct><fct><lgl><lgl><lgl><chr><dbl>
+#> 1 1503 4 DRUG TRUE FALSE FALSE NA 0
+#> 2 1503 5 DRUG TRUE FALSE FALSE NA 0
+#> 3 1503 6 DRUG TRUE FALSE FALSE NA 0
+#> 4 1503 7 DRUG TRUE FALSE FALSE NA 0
+#> 5 1507 4 PLACEBO TRUE FALSE FALSE NA 0
+#> 6 1507 5 PLACEBO TRUE FALSE FALSE NA 0
+#> 7 1507 6 PLACEBO TRUE FALSE FALSE NA 0
+#> 8 1507 7 PLACEBO TRUE FALSE FALSE NA 0
+#> 9 1509 4 DRUG TRUE FALSE FALSE NA 0
+#> 10 1509 5 DRUG TRUE FALSE FALSE NA 0
+#> # ℹ 678 more rows
+
+delta_df<-delta_template(imputeObj)%>%
+as_tibble()%>%
+mutate(delta =if_else(THERAPY=="DRUG"&is_missing , 5, 0))%>%
+select(PATIENT, VISIT, delta)
+
+delta_df
+#> # A tibble: 688 × 3
+#> PATIENT VISIT delta
+#> <fct><fct><dbl>
+#> 1 1503 4 0
+#> 2 1503 5 0
+#> 3 1503 6 0
+#> 4 1503 7 0
+#> 5 1507 4 0
+#> 6 1507 5 0
+#> 7 1507 6 0
+#> 8 1507 7 0
+#> 9 1509 4 0
+#> 10 1509 5 0
+#> # ℹ 678 more rows
+
+anaObj_delta<-analyse(
+imputeObj,
+ancova,
+ delta =delta_df,
+ vars =set_vars(
+ subjid ="PATIENT",
+ outcome ="CHANGE",
+ visit ="VISIT",
+ group ="THERAPY",
+ covariates =c("BASVAL")
+)
+)
+
+
+
+6 Pool
+
+
Finally, the pool() function can be used to summarise the analysis results across multiple
+imputed datasets to provide an overall statistic with a standard error, confidence intervals and a p-value for
+the hypothesis test of the null hypothesis that the effect is equal to 0.
+
Note that the pooling method is automatically derived based on the method that was specified
+in the original call to draws():
For method_condmean(type = "bootstrap") inference is either based on a normal approximation using the bootstrap standard error (pool(..., type = "normal")) or on the bootstrap percentiles (pool(..., type = "percentile")).
+
For method_condmean(type = "jackknife") inference is based on a normal approximation using the jackknife estimate of the standard error.
+
For method = method_bmlmi() inference is according to the methods described by von Hippel and Bartlett (see the stat_specs vignette for details)
+
+
Since we have used Bayesian multiple imputation in this vignette, the pool() function will automatically use Rubin’s rules.
These outputs gives an estimated difference of
+2.180 (95% CI -0.080 to 4.439)
+between the two groups at the last visit with an associated p-value of 0.059.
+
+
+
+7 Code
+
+
We report below all the code presented in this vignette.
+
+library(rbmi)
+library(dplyr)
+
+data("antidepressant_data")
+dat<-antidepressant_data
+
+# Use expand_locf to add rows corresponding to visits with missing outcomes to the dataset
+dat<-expand_locf(
+dat,
+ PATIENT =levels(dat$PATIENT), # expand by PATIENT and VISIT
+ VISIT =levels(dat$VISIT),
+ vars =c("BASVAL", "THERAPY"), # fill with LOCF BASVAL and THERAPY
+ group =c("PATIENT"),
+ order =c("PATIENT", "VISIT")
+)
+
+# Create data_ice and set the imputation strategy to JR for
+# each patient with at least one missing observation
+dat_ice<-dat%>%
+arrange(PATIENT, VISIT)%>%
+filter(is.na(CHANGE))%>%
+group_by(PATIENT)%>%
+slice(1)%>%
+ungroup()%>%
+select(PATIENT, VISIT)%>%
+mutate(strategy ="JR")
+
+# In this dataset, subject 3618 has an intermittent missing values which does not correspond
+# to a study drug discontinuation. We therefore remove this subject from `dat_ice`.
+# (In the later imputation step, it will automatically be imputed under the default MAR assumption.)
+dat_ice<-dat_ice[-which(dat_ice$PATIENT==3618),]
+
+# Define the names of key variables in our dataset using `set_vars()`
+# and the covariates included in the imputation model
+# Note that the covariates argument can also include interaction terms
+vars<-set_vars(
+ outcome ="CHANGE",
+ visit ="VISIT",
+ subjid ="PATIENT",
+ group ="THERAPY",
+ covariates =c("BASVAL*VISIT", "THERAPY*VISIT")
+)
+
+# Define which imputation method to use (here: Bayesian multiple imputation with 150 imputed datsets)
+method<-method_bayes(
+ burn_in =200,
+ burn_between =5,
+ n_samples =150
+)
+
+
+# Create samples for the imputation parameters by running the draws() function
+set.seed(987)
+drawObj<-draws(
+ data =dat,
+ data_ice =dat_ice,
+ vars =vars,
+ method =method,
+ quiet =TRUE
+)
+
+# Impute the data
+imputeObj<-impute(
+drawObj,
+ references =c("DRUG"="PLACEBO", "PLACEBO"="PLACEBO")
+)
+
+# Fit the analysis model on each imputed dataset
+anaObj<-analyse(
+imputeObj,
+ancova,
+ vars =set_vars(
+ subjid ="PATIENT",
+ outcome ="CHANGE",
+ visit ="VISIT",
+ group ="THERAPY",
+ covariates =c("BASVAL")
+)
+)
+
+# Apply a delta adjustment
+
+# Add a delta-value of 5 to all imputed values (i.e. those values
+# which were missing in the original dataset) in the drug arm.
+delta_df<-delta_template(imputeObj)%>%
+as_tibble()%>%
+mutate(delta =if_else(THERAPY=="DRUG"&is_missing , 5, 0))%>%
+select(PATIENT, VISIT, delta)
+
+# Repeat the analyses with the adjusted values
+anaObj_delta<-analyse(
+imputeObj,
+ancova,
+ delta =delta_df,
+ vars =set_vars(
+ subjid ="PATIENT",
+ outcome ="CHANGE",
+ visit ="VISIT",
+ group ="THERAPY",
+ covariates =c("BASVAL")
+)
+)
+
+# Pool the results
+poolObj<-pool(
+anaObj,
+ conf.level =0.95,
+ alternative ="two.sided"
+)
This vignette describes how retrieved dropout models which include time-varying intercurrent event (ICE) indicators can be
+implemented in the rbmi package.
+
+
+1 Retrieved dropout models in a nutshell
+
+
Retrieved dropout models have been proposed for the analysis of estimands using the treatment policy strategy for addressing an ICE.
+In these models, missing outcomes are multiply imputed conditional upon whether they occur pre- or post-ICE. Retrieved dropout models
+typically rely on an extended missing-at-random (MAR) assumption, i.e., they assume that missing outcome data is similar to observed
+data from subjects in the same treatment group with the same observed outcome history, and the same ICE status. For a more
+comprehensive description and evaluation of retrieved dropout models, we refer to Guizzaro et al. (2021), Polverejan and Dragalin (2020), Noci et al. (2023),
+Drury et al. (2024), and Bell et al. (2024). Broadly, these publications find that retrieved dropout models reduce bias compared to alternative
+analysis approaches based on imputation under a basic MAR assumption or a reference-based missing data assumption. However, several
+issues of retrieved dropout models have also been highlighted. Retrieved dropout models require that enough post-ICE data is
+collected to inform the imputation model. Even with relatively small amounts of missingness, complex retrieved dropout models may
+face identifiability issues. Another drawback to these models in general is the loss of power relative to reference-based imputation methods, which
+becomes meaningful for post-ICE observation percentages below 50% and increases at an accelerating rate as this percentage decreases (Bell et al. 2024).
+
+
+
+2 Data simulation using function simulate_data()
+
+
For the purposes of this vignette we will first create a simulated dataset with the rbmi function simulate_data().
+The simulate_data() function generates data from a randomized clinical trial with longitudinal continuous outcomes and up to two
+different types of ICEs.
+
Specifically, we simulate a 1:1 randomized trial of an active drug (intervention) versus placebo (control) with 100 subjects per
+group and 4 post-baseline assessments (3-monthly visits until 12 months):
+
+
The mean outcome trajectory in the placebo group increases linearly from 50 at baseline (visit 0) to 60 at visit 4, i.e. the slope is 10 points/year (or 2.5 points every 3 months).
+
The mean outcome trajectory in the intervention group is identical to the placebo group up to month 6. From month 6 onward, the slope decreases by 50% to 5 points/year (i.e. 1.25 points every 3 months).
+
The covariance structure of the baseline and follow-up values in both groups is implied by a random intercept and slope model
+with a standard deviation of 5 for both the intercept and the slope, and a correlation of 0.25. In addition, an independent
+residual error with standard deviation 2.5 is added to each assessment.
+
+
The probability of the intercurrent event study drug discontinuation after each visit is calculated according to a logistic model which depends on the observed outcome at that visit.
+Specifically, a visit-wise discontinuation probability of 3% and 4% in the control and intervention group, respectively, is specified in case the observed outcome is equal to 50 (the mean value at baseline).
+The odds of a discontinuation is simulated to increase by +10% for each +1 point increase of the observed outcome.
+
Study drug discontinuation is simulated to have no effect on the mean trajectory in the placebo group.
+In the intervention group, subjects who discontinue follow the slope of the mean trajectory from the placebo group
+from that time point onward. This is compatible with a copy increments in reference (CIR) assumption.
+
Study dropout at the study drug discontinuation visit occurs with a probability of 50% leading to missing outcome
+data from that time point onward.
## The following objects are masked from 'package:stats':
+##
+## filter, lag
+
## The following objects are masked from 'package:base':
+##
+## intersect, setdiff, setequal, union
+
+set.seed(1392)
+
+time<-c(0, 3, 6, 9, 12)
+
+# Mean trajectory control
+muC<-c(50.0, 52.5, 55.0, 57.5, 60.0)
+
+# Mean trajectory intervention
+muT<-c(50.0, 52.5, 55.0, 56.25, 57.50)
+
+# Create Sigma
+sd_error<-2.5
+covRE<-rbind(
+c(25.0, 6.25),
+c(6.25, 25.0)
+)
+
+Sigma<-cbind(1, time/12)%*%
+covRE%*%rbind(1, time/12)+
+diag(sd_error^2, nrow =length(time))
+
+# Set simulation parameters of the control group
+parsC<-set_simul_pars(
+ mu =muC,
+ sigma =Sigma,
+ n =100, # sample size
+ prob_ice1 =0.03, # prob of discontinuation for outcome equal to 50
+ or_outcome_ice1 =1.10, # +1 point increase => +10% odds of discontinuation
+ prob_post_ice1_dropout =0.5# dropout rate following discontinuation
+)
+
+# Set simulation parameters of the intervention group
+parsT<-parsC
+parsT$mu<-muT
+parsT$prob_ice1<-0.04
+
+# Simulate data
+data<-simulate_data(
+ pars_c =parsC,
+ pars_t =parsT,
+ post_ice1_traj ="CIR"# Assumption about post-ice trajectory
+)%>%
+select(-c(outcome_noICE, ind_ice2))# remove unncessary columns
+
+
+head(data)
+
## id visit group outcome_bl ind_ice1 dropout_ice1 outcome
+## 1 id_1 0 Control 53.35397 0 0 53.35397
+## 2 id_1 1 Control 53.35397 0 0 55.15100
+## 3 id_1 2 Control 53.35397 0 0 59.81038
+## 4 id_1 3 Control 53.35397 0 0 61.59709
+## 5 id_1 4 Control 53.35397 0 0 67.08044
+## 6 id_2 0 Control 53.31025 0 0 53.31025
+
The frequency of the ICE and proportion of data collected after the ICE impacts the variance of the treatment effect for
+retrieved dropout models. For example, a large proportion of ICE combined with a small proportion of data collected after the
+ICE might result in substantial variance inflation, especially for more complex retrieved dropout models.
+
The proportion of subjects with an ICE and the proportion of subjects who withdrew from the simulated study is summarized below:
For this study 23% of the study participants discontinued from study treatment in the control arm and 24% in the intervention
+arm. Approximately half of the participants who discontinued from treatment dropped-out from the study at the discontinuation
+visit leading to missing outcomes at subsequent visits.
+
+
+
+3 Estimators based on retrieved dropout models
+
+
We consider retrieved dropout methods which model pre- and post-ICE outcomes jointly by including time-varying ICE indicators in
+the imputation model, i.e. we allow the occurrence of the ICE to impact the mean structure but not the covariance matrix.
+Imputation of missing outcomes is then performed under a MAR assumption including all observed data. For the analysis of the
+completed data, we use a standard ANCOVA model of the outcome at each follow-up visit, respectively, with treatment assignment
+as the main covariate and adjustment for the baseline outcome.
+
Specifically, we consider the following imputation models:
+
+
+Imputation under a basic MAR assumption (basic MAR): This model ignores whether an outcome is observed pre- or post-ICE,
+i.e. it is not a retrieved dropout model. Rather, it is asymptotically equivalent to a standard MMRM model and analogous to the
+“MI1” model in Bell et al. (2024). The only difference to the “MI1” model is that rbmi is not based on sequential imputation but
+rather, all missing outcomes are imputed simultaneously based on a MMRM-type imputation model. We include baseline outcome by
+visit and treatment group by visit interaction terms in the imputation model which is of the form:
+change ~ outcome_bl*visit + group*visit.
+
+Retrieved dropout model 1 (RD1): This model uses the following imputation model:
+change ~ outcome_bl*visit + group*visit + time_since_ice1*group, where time_since_ice1 is set to 0 up to
+the treatment discontinuation and to the time from treatment
+discontinuation (in months) at subsequent visits. This implies a change in the slope of the outcome trajectories after the ICE, which
+is modeled separately for each treatment arm. This model is similar to the “TV2-MAR” estimator in Noci et al. (2023). Compared to the basic
+MAR model, this model requires estimation of 2 additional parameters.
+
+Retrieved dropout model 2 (RD2): This model uses the following imputation model: change ~ outcome_bl*visit + group*visit + ind_ice1*group*visit. This assumes a constant shift in outcomes after the ICE, which is modeled separately for each treatment arm
+and each visit. This model is analogous to the “MI2” model in Bell et al. (2024). Compared to the basic MAR model, this model requires
+estimation of 2 times “number of visits” additional parameters. It makes different though rather weaker assumptions than the RD1
+model but might also be harder to fit if post-ICE data collection is sparse at some visits.
+
+
+
+
+4 Implementation of the defined retrieved dropout models in rbmi
+
+
rbmi supports the inclusion of time-varying covariates in the imputation model. The only requirement is that the time-varying
+covariate is non-missing at all visits including those where the outcome might be missing.
+Imputation is performed under a (extended) MAR assumption. Therefore, all imputation approaches implemented in rbmi are valid and
+should yield comparable estimators and standard errors.
+For this vignette, we used the conditional mean imputation approach combined with the jackknife.
+
+
+4.1 Basic MAR model
+
+
+# Define key variables for the imputation and analysis models
+vars<-set_vars(
+ subjid ="id",
+ visit ="visit",
+ outcome ="change",
+ group ="group",
+ covariates =c("outcome_bl*visit", "group*visit")
+)
+
+vars_an<-vars
+vars_an$covariates<-"outcome_bl"
+
+# Define imputation method
+method<-method_condmean(type ="jackknife")
+
+draw_obj<-draws(
+ data =data,
+ data_ice =NULL,
+ vars =vars,
+ method =method,
+ quiet =TRUE
+)
+
+impute_obj<-impute(
+draw_obj
+)
+
+ana_obj<-analyse(
+impute_obj,
+ vars =vars_an
+)
+
+pool_obj_basicMAR<-pool(ana_obj)
+pool_obj_basicMAR
The point estimators of the treatment effect at the last visit were
+-2.872,
+-2.506, and
+-2.617 for the basic MAR, RD1, and RD2 estimators, respectively, i.e. slightly
+smaller for the retrieved dropout models compared to the basic MAR model.
+The corresponding standard errors of the 3 estimators were
+0.945,
+0.969, and
+0.975, i.e. slightly larger for the retrieved dropout models compared to the
+basic MAR model.
+
+
+
+
References
+
+
+
+Bell, James, Thomas Drury, Tobias Mütze, Christian Bressen Pipper, Lorenzo Guizzaro, Marian Mitroiu, Khadija Rerhou Rantell, Marcel Wolbers, and David Wright. 2024. “Estimation Methods for Estimands Using the Treatment Policy Strategy; a Simulation Study Based on the PIONEER 1 Trial.”arXiv Preprint. https://arxiv.org/abs/2402.12850.
+
+
+Drury, Thomas, Juan J Abellan, Nicky Best, and Ian R White. 2024. “Estimation of Treatment Policy Estimands for Continuous Outcomes Using Off-Treatment Sequential Multiple Imputation.”Pharmaceutical Statistics.
+
+
+Guizzaro, Lorenzo, Frank Pétavy, Robin Ristl, and Ciro Gallo. 2021. “The Use of a Variable Representing Compliance Improves Accuracy of Estimation of the Effect of Treatment Allocation Regardless of Discontinuation in Trials with Incomplete Follow-up.”Statistics in Biopharmaceutical Research 13 (1): 119–27.
+
+
+Noci, Alessandro, Marcel Wolbers, Markus Abt, Corine Baayen, Hans Ulrich Burger, Man Jin, and Weining Zhao Robieson. 2023. “A Comparison of Estimand and Estimation Strategies for Clinical Trials in Early Parkinson’s Disease.”Statistics in Biopharmaceutical Research 15 (3): 491–501.
+
+
+Polverejan, Elena, and Vladimir Dragalin. 2020. “Aligning Treatment Policy Estimands and Estimators—a Simulation Study in Alzheimer’s Disease.”Statistics in Biopharmaceutical Research 12 (2): 142–54.
+
This document describes the statistical methods implemented in the rbmi R package for standard and reference-based multiple imputation of continuous longitudinal outcomes.
+The package implements three classes of multiple imputation (MI) approaches:
+
+
Conventional MI methods based on Bayesian (or approximate Bayesian) posterior draws of model parameters combined with Rubin’s rules to make inferences as described in Carpenter, Roger, and Kenward (2013) and Cro et al. (2020).
+
Conditional mean imputation methods combined with re-sampling techniques as described in Wolbers et al. (2022).
+
Bootstrapped MI methods as described in von Hippel and Bartlett (2021).
+
+
The document is structured as follows: we first provide an informal introduction to estimands and corresponding treatment effect estimation based on MI (section 2). The core of this document consists of section 3 which describes the statistical methodology in detail and also contains a comparison of the implemented approaches (section 3.10). The link between theory and the functions included in package rbmi is described in section 4. We conclude with a comparison of our package to some alternative software implementations of reference-based imputation methods (section 5).
+
+
+
+2 Introduction to estimands and estimation methods
+
+
+
+2.1 Estimands
+
+
The ICH E9(R1) addendum on estimands and sensitivity analyses describes a systematic approach to ensure alignment among clinical trial objectives, trial execution/conduct, statistical analyses, and interpretation of results (ICH E9 working group (2019)).
+As per the addendum, an estimand is a precise description of the treatment effect reflecting the clinical question posed by the trial objective which summarizes at a population-level what the outcomes would be in the same patients under different
+treatment conditions being compared.
+One important attribute of an estimand is a list of possible intercurrent events (ICEs), i.e. of events occurring after treatment initiation that affect either the interpretation or the existence of the measurements associated with the clinical question of interest, and the definition of appropriate strategies to deal with ICEs. The three most relevant strategies for the purpose of this document are the hypothetical strategy, the treatment policy strategy, and the composite strategy. For the hypothetical strategy, a scenario is envisaged in which the ICE would not occur. Under this scenario, endpoint values after the ICE are not directly observable and treated using models for missing data.
+For the treatment policy strategy, the treatment effect in the presence of the ICEs is targeted and analyses are based on the observed outcomes regardless whether the subject had an ICE or not.
+For the composite strategy, the ICE itself is included as a component of the endpoint.
+
+
+
+2.2 Alignment between the estimand and the estimation method
+
+
The ICH E9(R1) addendum distinguishes between ICEs and missing data (ICH E9 working group (2019)). Whereas ICEs such as treatment discontinuations reflect clinical practice, the amount of missing data can be minimized in the conduct of a clinical trial. However, there are many connections between missing data and ICEs. For example, it is often difficult to retain subjects in a clinical trial after treatment discontinuation and a subject’s dropout from the trial leads to missing data. As another example, outcome values after ICEs addressed using a hypothetical strateg are not directly observable under the hypothetical scenario. Consequently, any observed outcome values after such ICEs are typically discarded and treated as missing data.
+
The addendum proposes that estimation methods to address the problem presented by missing data should be selected to align with the estimand. A recent overview of methods to align the estimator with the estimand is Mallinckrodt et al. (2020). A short introduction on estimation methods for studies with longitudinal endpoints can also be found in Wolbers et al. (2022). One prominent statistical method for this purpose is multiple imputation (MI), which is the target of the rbmi package.
+
+
+2.2.1 Missing data prior to ICEs
+
+
Missing data may occur in subjects without an ICE or prior to the occurrence of an ICE. As such missing outcomes are not associated with an ICE, it is often plausible to impute them under a missing-at-random (MAR) assumption using a standard MMRM imputation model of the longitudinal outcomes. Informally, MAR occurs if the missing data can be fully accounted for by the baseline variables included in the model and the observed longitudinal outcomes, and if the model is correctly specified.
+
+
+
+2.2.2 Implementation of the hypothetical strategy
+
+
The MAR imputation model described above is often also a good starting point for imputing data after an ICE handled using a hypothetical strategy (Mallinckrodt et al. (2020)).
+Informally, this assumes that unobserved values after the ICE would have been similar to the observed data from subjects who did not have the ICE and remained under follow-up.
+However, in some situations, it may be more reasonable to assume that missingness is “informative” and indicates a systematically better or worse outcome than in observed subjects. In such situations, MNAR imputation with a \(\delta\)-adjustment could be explored as a sensitivity analysis. \(\delta\)-adjustments add a fixed or random quantity to the imputations in order to make the imputed outcomes systematically worse or better than those observed as described in Cro et al. (2020). In rbmi only fixed \(\delta\)-adjustments are implemented.
+
+
+
+2.2.3 Implementation of the treatment policy strategy
+
+
Ideally, data collection continues after an ICE handled with a treatment policy strategy and no missing data arises.
+Indeed, such post-ICE data are increasingly systematically collected in RCTs.
+However, despite best efforts, missing data after an ICE such as study treatment discontinuation may still occur because the subject drops out from the study after discontinuation. It is difficult to give definite recommendations regarding the implementation of the treatment policy strategy in the presence of missing data at this stage because the optimal method is highly context dependent and a topic of ongoing statistical research.
+
For ICEs which are thought to have a negligible effect on efficacy outcomes, standard MAR-based imputation which ignores whether an outcome is observed pre- or post-ICE may be appropriate.
+In contrast, an ICE such as treatment discontinuation may be expected to have a more substantial impact on efficacy outcomes. In such settings, the MAR assumption may still be plausible after conditioning on the subject’s time-varying treatment status (Guizzaro et al. (2021)). In this case, one option is to impute missing post-discontinuation data based on subjects who also discontinued treatment but continued to be followed up. Another option which may require somewhat less post-discontinuation data is to include all subjects in the imputation procedure but to model post-discontinuation data by using time-varying treatment status indicators (Guizzaro et al. (2021), Polverejan and Dragalin (2020), Noci et al. (2023), Drury et al. (2024), Bell et al. (2024)). In this approach, post-ICE outcomes are included in every step of the analysis, including in the fitting of the imputation model. It assumes that ICEs may impact post-ICE outcomes but that otherwise missingness is non-informative. The approach also assumes that the time-varying covariates do not contain missing values, deviations in outcomes after the ICE are correctly modeled by these time-varying covariates, and that sufficient post-ICE data are available to inform the regression coefficients of the time-varying covariates.
+The resulting imputation models are called “retrieved dropout models” in the statistical literature. These models tend to have less bias than alternative analysis approaches based on imputation under a basic MAR assumption or a reference-based missing data assumption. However, retrieved dropout models have been associated with inflated standard errors of associated treatment effect estimators which has a detrimental effect on study power. In particular, it has been observed that once the post-ICE observation percentages falls below 50%, the power loss can be quite dramatic (Bell et al. 2024). We illustrate the implementation of retrieved dropout models in the vignette “Implementation of retrieved-dropout models using rbmi” (vignette(topic = "retrieved_dropout", package = "rbmi")).
+
In some trial settings, only few subjects discontinue the randomized treatment. In other settings, treatment discontinuation rates are higher but it is difficult to retain subjects in the trial after treatment discontinuation leading to sparse data collection after treatment discontinuation. In both settings, the amount of available data after treatment discontinuation may be insufficient to inform an imputation model which explicitly models post-discontinuation data. Depending on the disease area and the anticipated mechanism of action of the intervention, it may be plausible to assume that subjects in the intervention group behave similarly to subjects in the control group after the ICE treatment discontinuation. In this case, reference-based imputation methods are an option (Mallinckrodt et al. (2020)). Reference-based imputation methods formalize the idea to impute missing data in the intervention group based on data from a control or reference group. For a general description and review of reference-based imputation methods, we refer to Carpenter, Roger, and Kenward (2013), Cro et al. (2020), I. White, Royes, and Best (2020) and Wolbers et al. (2022). For a technical description of the implemented statistical methodology for reference-based imputation, we refer to section 3 (in particular section 3.4).
+
+
+
+2.2.4 Implementation of the composite strategy
+
+
The composite strategy is typically applied to binary or time-to-event outcomes but it can also be used for continuous outcomes by ascribing a suitably unfavorable value to patients who experience ICEs for which a composite strategy has been defined. One possibility to implement this is to use MI with a \(\delta\)-adjustment for post-ICE data as described in Darken et al. (2020).
+
+
+
+
+
+3 Statistical methodology
+
+
+
+3.1 Overview of the imputation procedure
+
+
Analyses of datasets with missing data always rely on missing data assumptions. The methods described here can be used to produce valid imputations under a MAR assumption or under reference-based imputation assumptions. MNAR imputation based on fixed \(\delta\)-adjustments as typically used in sensitivity analyses such as tipping-point analyses are also supported.
+
Three general imputation approaches are implemented in rbmi:
+
+
Conventional MI based on Bayesian (or approximate Bayesian) posterior draws from the imputation model combined with Rubin’s rules for inference as described in Carpenter, Roger, and Kenward (2013) and Cro et al. (2020).
+
Conditional mean imputation based on the REML estimate of the imputation model combined with resampling techniques (the jackknife or the bootstrap) for inference as described in Wolbers et al. (2022).
+
Bootstrapped MI methods based on REML estimates of the imputation model as described in von Hippel and Bartlett (2021).
+
+
+
+3.1.1 Conventional MI
+
+
Conventional MI approaches include the following steps:
Fit a Bayesian multivariate normal mixed model for repeated measures (MMRM) to the observed longitudinal outcomes after exclusion of data after ICEs for which reference-based missing data imputation is desired (Section 3.3.3). Draw \(M\) posterior samples of the estimated parameters (regression coefficients and covariance matrices) from this model.
+
Alternatively, \(M\) approximate posterior draws from the posterior distribution can be sampled by repeatedly applying conventional restricted maximum-likelihood (REML) parameter estimation of the MMRM model to nonparametric bootstrap samples from the original dataset (Section 3.3.4).
Take a single sample \(m\) (\(m\in 1,\ldots, M)\) from the posterior distribution of the imputation model parameters.
+
For each subject, use the sampled parameters and the defined imputation strategy to determine the mean and covariance matrix describing the subject’s marginal outcome distribution for all longitudinal outcome assessments (i.e. observed and missing outcomes).
+
For each subjects, construct the conditional multivariate normal distribution of their missing outcomes given their observed outcomes (including observed outcomes after ICEs for which a reference-based assumption is desired).
+
For each subject, draw a single sample from this conditional distribution to impute their missing outcomes leading to a complete imputed dataset.
+
For sensitivity analyses, a pre-defined \(\delta\)-adjustment may be applied to the imputed data prior to the analysis step. (Section 3.5).
Analyze the imputed dataset using an analysis model (e.g. ANCOVA) resulting in a point estimate and a standard error (with corresponding degrees of freedom) of the treatment effect.
Repeat steps 2. and 3. for each posterior sample \(m\), resulting in \(M\) complete datasets, \(M\) point estimates of the treatment effect, and \(M\) standard errors (with corresponding degrees of freedom). Pool the \(M\) treatment effect estimates, standard errors, and degrees of freedom using the rules by Barnard and Rubin to obtain the final pooled treatment effect estimator, standard error, and degrees of freedom.
+
+
+
+
+3.1.2 Conditional mean imputation
+
+
The conditional mean imputation approach includes the following steps:
Fit a conventional multivariate normal/MMRM model using restricted maximum likelihood (REML) to the observed longitudinal outcomes after exclusion of data after ICEs for which reference-based missing data imputation is desired (Section 3.3.2).
For each subject, use the fitted parameters from step 1. to construct the conditional distribution of missing outcomes given observed outcomes (including observed outcomes after ICEs for which reference-based missing data imputation is desired) as described above.
+
For each subject, impute their missing data deterministically by the mean of this conditional distribution leading to a complete imputed dataset.
+
For sensitivity analyses, a pre-defined \(\delta\)-adjustment may be applied to the imputed data prior to the analysis step. (Section 3.5).
Apply an analysis model (e.g. ANCOVA) to the completed dataset resulting in a point estimate of the treatment effect.
+
+
+
+Jackknife or bootstrap inference step (Section 3.8)
+
+
+
Inference for the treatment effect estimate from 3. is based on re-sampling techniques. Both the jackknife and the bootstrap are supported. Importantly, these methods require repeating all steps of the imputation procedure (i.e. imputation, conditional mean imputation, and analysis steps) on each of the resampled datasets.
+
+
+
+
+3.1.3 Bootstrapped MI
+
+
The bootstrapped MI approach includes the following steps:
Apply conventional restricted maximum-likelihood (REML) parameter estimation of the MMRM model to \(B\) nonparametric bootstrap samples from the original dataset using the observed longitudinal outcomes after exclusion of data after ICEs for which reference-based missing data imputation is desired.
Take a bootstrapped dataset \(b\) (\(b\in 1,\ldots, B)\) and its corresponding imputation model parameter estimates.
+
For each subject (from the bootstrapped dataset), use the parameter estimates and the defined strategy for dealing with their ICEs to determine the mean and covariance matrix describing the subject’s marginal outcome distribution for all longitudinal outcome assessments (i.e. observed and missing outcomes).
+
For each subjects (from the bootstrapped dataset), construct the conditional multivariate normal distribution of their missing outcomes given their observed outcomes (including observed outcomes after ICEs for which reference-based missing data imputation is desired).
+
For each subject (from the bootstrapped dataset), draw \(D\) samples from this conditional distributions to impute their missing outcomes leading to \(D\) complete imputed dataset for bootstrap sample \(b\).
+
For sensitivity analyses, a pre-defined \(\delta\)-adjustment may be applied to the imputed data prior to the analysis step. (Section 3.5).
Analyze each of the \(B\times D\) imputed datasets using an analysis model (e.g. ANCOVA) resulting in \(B\times D\) point estimates of the treatment effect.
Pool the \(B\times D\) treatment effect estimates as described in von Hippel and Bartlett (2021) to obtain the final pooled treatment effect estimate, standard error, and degrees of freedom.
+
+
+
+
+
+3.2 Setting, notation, and missing data assumptions
+
+
Assume that the data are from a study with \(n\) subjects in total and that each subject \(i\) (\(i=1,\ldots,n\)) has \(J\) scheduled follow-up visits at which the outcome of interest is assessed.
+In most applications, the data will be from a randomized trial of an intervention vs a control group and the treatment effect of interest is a comparison in outcomes at a specific visit between these randomized groups. However, single-arm trials or multi-arm trials are in principle also supported by the rbmi implementation.
+
Denote the observed outcome vector of length \(J\) for subject \(i\) by \(Y_i\) (with missing assessments coded as NA (not available)) and its non-missing and missing components by \(Y_{i!}\) and \(Y_{i?}\), respectively.
+By default, imputation of missing outcomes in \(Y_{i}\) is performed under a MAR assumption in rbmi. Therefore, if missing data following an ICE are to be handled using MAR imputation, this is compatible with the default assumption. As discussed in Section 2, the MAR assumption is often a good starting point for implementing a hypothetical strategy. But also note that observed outcome data after an ICE handled using a hypothetical strategy is not compatible with this strategy. Therefore, we assume that all post-ICE data after ICEs handled using a hypothetical strategy are already set to NA in \(Y_i\) prior calling any rbmi functions. However, any observed outcomes after ICEs handled using a treatment policy strategy should be included in \(Y_i\) as they are compatible with this strategy.
+
Subjects may also experience up to one ICE after which missing data imputation according to a reference-based imputation method is foreseen. For a subject \(i\) with such an ICE, denote their first visit which is affected by the ICE by \(\tilde{t}_i \in \{1,\ldots,J\}\). For all other subjects, set \(\tilde{t}_i=\infty\). A subject’s outcome vector after setting observed outcomes from visit \(\tilde{t}_i\) onwards to missing (i.e. NA) is denoted as \(Y'_i\) and the corresponding data vector after removal of NA elements as \(Y'_{i!}\).
+
MNAR \(\delta\)-adjustments are added to the imputed datasets after the formal imputation steps. This is covered in a separate section (Section 3.5).
+
+
+
+3.3 The base imputation model
+
+
+
+3.3.1 Included data and model specification
+
+
The purpose of the imputation model is to estimate (covariate-dependent) mean trajectories and covariance matrices for each group in the absence of ICEs handled using reference-based imputation methods. Conventionally,
+publications on reference-based imputation methods have implicitly assumed that the corresponding post-ICE
+data is missing for all subjects (Carpenter, Roger, and Kenward (2013)). We also allow the situation where post-ICE data
+is available for some subjects but needs to be imputed using reference-based methods for others. However,
+any observed data after ICEs for which reference-based imputation methods are specified is not compatible
+with the imputation model described below and they are therefore removed and considered as missing for
+the purpose of estimating the imputation model, and for this purpose only. For example, if a patient has an ICE addressed with a reference-based method but outcomes after the ICE are collected, these post-ICE outcomes will be excluded when fitting the base imputation model (but they will be included again in the following steps).
+That is, the base imputation model is fitted to \(Y'_{i!}\) and not to \(Y_{i!}\).
+If we did not exclude these data, then the imputation model would mistakenly estimate mean trajectories based on a mixture of observed pre- and post-ICE data which are not relevant for reference-based imputations.
+
Observed post-ICE outcomes in the control or reference group are also excluded from the base imputation model if the user specifies a reference-based imputation strategy for such ICEs. This ensures that an ICE has the same impact on the data included in the imputation model regardless whether the ICE occurred in the control or the intervention group. On the other hand, imputation in the reference group is based on a MAR assumption even for reference-based imputation methods and it may be preferable in some settings to include post-ICE data from the control group in the base imputation model. This can be implemented by specifying a MAR strategy for the ICE in the control group and a reference-based strategy for the same ICE in the intervention group.
+
The base imputation model of the longitudinal outcomes \(Y'_i\) assumes that the mean structure is a linear function of covariates. Full flexibility for the specification of the linear predictor of the model is supported. At a minimum the covariates should include the treatment group, the (categorical) visit, and treatment-by-visit interactions. Typically, other covariates including the baseline outcome are also included.
+External time-varying covariates (e.g. calendar time of the visit) as well as internal time-varying (e.g. time-varying indicators of treatment discontinuation or initiation of rescue treatment) may in principle also be included if indicated (Guizzaro et al. (2021)). Missing covariate values are not allowed. This means that the values of time-varying covariates must be non-missing at every visit regardless of whether the outcome is measured or missing.
+
Denote the \(J\times p\) design matrix for subject \(i\) corresponding to the mean structure model by \(X_i\) and the same matrix after removal of rows corresponding to missing outcomes in \(Y'_{i!}\) by \(X'_{i!}\).
+Here \(p\) is the number of parameters in the mean structure of the model for the elements of \(Y'_{i!}\).
+The base imputation model for the observed outcomes is defined as:
+\[ Y'_{i!} = X'_{i!}\beta + \epsilon_{i!} \mbox{ with } \epsilon_{i!}\sim N(0,\Sigma_{i!!})\]
+where \(\beta\) is the vector of regression coefficients and \(\Sigma_{i!!}\) is a covariance matrix which is obtained from the complete-data \(J\times J\)-covariance matrix \(\Sigma\) by omitting rows and columns corresponding to missing outcome assessments for subject \(i\).
+
Typically, a common unstructured covariance matrix for all subjects is assumed for \(\Sigma\) but separate covariate matrices per treatment group are also supported. Indeed, the implementation also supports the specification of separate covariate matrices according to an arbitrarily defined categorical variable which groups the subjects into disjoint subset. For example, this could be useful if different covariance matrices are suspected in different subject strata. Finally, for all imputation methods described below that do not rely on Bayesian model fitting through MCMC, there is further flexibility in the choice of the covariance structure, i.e. unstructured (default), heterogeneous Toeplitz, heterogeneous compound symmetry, and AR(1) covariance structures are supported.
+
+
+
+3.3.2 Restricted maximum likelihood estimation (REML)
+
+
Frequentist parameter estimation for the base imputation is based on REML. The use of REML as an improved alternative to maximum likelihood (ML) for covariance parameter estimation was originally proposed by Patterson and Thompson (1971). Since then, it has become the default method for parameter estimation in linear mixed effects models. rbmi allows to choose between ML and REML methods to estimate the model parameters, with REML being the default option.
+
+
+
+3.3.3 Bayesian model fitting
+
+
The Bayesian imputation model is fitted with the R package rstan (Stan Development Team (2020)). rstan is the R interface of Stan. Stan is a powerful and flexible statistical software developed by a dedicated team and implements Bayesian inference with state-of-the-art MCMC sampling procedures. The multivariate normal model with missing data specified in section 3.3.1 can be considered a generalization of the models described in the Stan user’s guide (see Stan Development Team (2020, sec. 3.5)).
+
The same prior distributions as in the SAS implementation of the “five macros” are used (Roger (2021)), i.e. an improper flat priors for the regression coefficients and a weakly informative inverse Wishart prior for the covariance matrix (or matrices). Specifically, let \(S \in \mathbb{R}^{J \times J}\) be a symmetric positive definite matrix and \(\nu \in (J-1, \infty)\). Then the symmetric positive definite matrix \(x \in \mathbb{R}^{J \times J}\) has density:
+\[
+\text{InvWish}(x \vert \nu, S) = \frac{1}{2^{\nu J/2}} \frac{1}{\Gamma_J(\frac{\nu}{2})} \vert S \vert^{\nu/2} \vert x \vert ^{-(\nu + J + 1)/2} \text{exp}(-\frac{1}{2} \text{tr}(Sx^{-1})).
+\]
+For \(\nu > J+1\) the mean is given by:
+\[
+E[x] = \frac{S}{\nu - J - 1}.
+\]
+We choose \(S\) equal to the estimated covariance matrix from the frequentist REML fit and \(\nu = J+2\) as these are the lowest degrees of freedom that guarantee a finite mean. Setting the degrees of freedom with such a low \(\nu\) ensures that the prior has little impact on the posterior. Moreover, this choice allows to interpret the parameter \(S\) as the mean of the prior distribution.
+
As in the “five macros”, the MCMC algorithm is initialized at the parameters from a frequentist REML fit (see section 3.3.2). As described above, we are using only weakly informative priors for the parameters. Therefore, the Markov chain is essentially starting from the targeted stationary posterior distribution and only a minimal amount of burn-in of the chain is required.
+
+
+
+3.3.4 Approximate Bayesian posterior draws via the bootstrap
+
+
Several authors have suggested that a stabler way to get Bayesian posterior draws from the imputation model is to bootstrap the incomplete data and to calculate REML estimates for each bootstrap sample (Little and Rubin (2002), Efron (1994), Honaker and King (2010), von Hippel and Bartlett (2021)). This method is proper in that the REML estimates from the bootstrap samples are asymptotically equivalent to a sample from the posterior distribution and may provide additional robustness to model misspecification (Little and Rubin (2002, sec. 10.2.3, part 6), Honaker and King (2010)). In order to retain balance between treatment groups and stratification factors across bootstrap samples, the user is able to provide stratification variables for the bootstrap in the rbmi implementation.
+
+
+
+
+3.4 Imputation step
+
+
+
+3.4.1 Marginal imputation distribution for a subject - MAR case
+
+
For each subject \(i\), the marginal distribution of the complete \(J\)-dimensional outcome vector from all assessment visits according to the imputation model is a multivariate normal distribution. Its mean \(\tilde{\mu}_i\) is given by the predicted mean from the imputation model conditional on the subject’s baseline characteristics, group, and, optionally, time-varying covariates. Its covariance matrix \(\tilde{\Sigma}_i\) is given by the overall estimated covariance matrix or, if different covariance matrices are assumed for different groups, the covariance matrix corresponding to subject \(i\)’s group.
+
+
+
+3.4.2 Marginal imputation distribution for a subject - reference-based imputation methods
+
+
For each subject \(i\), we calculate the mean and covariance matrix of the complete \(J\)-dimensional outcome vector from all assessment visits as for the MAR case and denote them by \(\mu_i\) and \(\Sigma_i\).
+For reference-based imputation methods, a corresponding reference group is also required for each group. Typically, the reference group for the intervention group will be the control group.
+The reference mean \(\mu_{ref,i}\) is defined as the predicted mean from the imputation model conditional on the reference group (rather than the actual group subject \(i\) belongs to) and the subject’s baseline characteristics.
+The reference covariance matrix \(\Sigma_{ref,i}\) is the overall estimated covariance matrix or, if different covariance matrices are assumed for different groups, the estimated covariance matrix corresponding to the reference group. In principle, time-varying covariates could also be included in reference-based imputation methods. However, this is only sensible for external time-varying covariates (e.g. calendar time of the visit) and not for internal time-varying covariates (e.g. treatment discontinuation) because the latter likely depend on the actual treatment group and it is typically not sensible to assume the same trajectory of the time-varying covariate for the reference group.
+
Based on these means and covariance matrices, the subject’s marginal imputation distribution for the reference-based imputation methods is then calculated as detailed in Carpenter, Roger, and Kenward (2013, sec. 4.3).
+Denote the mean and covariance matrix of this marginal imputation distribution by \(\tilde{\mu}_i\) and \(\tilde{\Sigma}_i\). Recall that the subject’s first visit which is affected by the ICE is denoted by \(\tilde{t}_i \in \{1,\ldots,J\}\) (and visit \(\tilde{t}_i-1\) is the last visit unaffected by the ICE). The marginal distribution for the patient \(i\) is then built according to the specific assumption for the data up to and post the ICE as follows:
+
+
Jump to reference (JR): the patient’s outcome distribution is normally distributed with the following mean:
+\[\tilde{\mu}_i = (\mu_i[1], \dots, \mu_i[\tilde{t}_i-1], \mu_{ref,i}[\tilde{t}_i], \dots, \mu_{ref,i}[J])^T.\]
+The covariance matrix is constructed as follows. First, we partition the covariance matrices \(\Sigma_i\) and \(\Sigma_{ref,i}\) in blocks according to the time of the ICE \(\tilde{t}_i\):
+\[
+\Sigma_{i} = \begin{bmatrix} \Sigma_{i, 11} & \Sigma_{i, 12} \\
+\Sigma_{i, 21} & \Sigma_{i,22} \\
+\end{bmatrix}
+\]
+\[
+\Sigma_{ref,i} = \begin{bmatrix} \Sigma_{ref, i, 11} & \Sigma_{ref, i, 12} \\
+\Sigma_{ref, i, 21} & \Sigma_{ref, i,22} \\
+\end{bmatrix}.
+\]
+We want the covariance matrix \(\tilde{\Sigma}_i\) to match \(\Sigma_i\) for the pre-deviation measurements, and \(\Sigma_{ref,i}\) for the conditional components for the post-deviation given the pre-deviation measurements. The solution is derived in Carpenter, Roger, and Kenward (2013, sec. 4.3) and is given by:
+\[
+\begin{matrix}
+\tilde{\Sigma}_{i,11} = \Sigma_{i, 11} \\
+\tilde{\Sigma}_{i, 21} = \Sigma_{ref,i, 21} \Sigma^{-1}_{ref,i, 11} \Sigma_{i, 11} \\
+\tilde{\Sigma}_{i, 22} = \Sigma_{ref, i, 22} - \Sigma_{ref,i, 21} \Sigma^{-1}_{ref,i, 11} (\Sigma_{ref,i, 11} - \Sigma_{i,11}) \Sigma^{-1}_{ref,i, 11} \Sigma_{ref,i, 12}.
+\end{matrix}
+\]
+
Copy increments in reference (CIR): the patient’s outcome distribution is normally distributed with the following mean:
+\[
+\begin{split}
+\tilde{\mu}_i =& (\mu_i[1], \dots, \mu_i[\tilde{t}_i-1], \mu_i[\tilde{t}_i-1] + (\mu_{ref,i}[\tilde{t}_i] - \mu_{ref,i}[\tilde{t}_i-1]), \dots,\\ &
+\mu_i[\tilde{t}_i-1]+(\mu_{ref,i}[J] - \mu_{ref,i}[\tilde{t}_i-1]))^T.
+\end{split}
+\]
+The covariance matrix is derived as for the JR method.
+
Copy reference (CR): the patient’s outcome distribution is normally distributed with mean and covariance matrix taken from the reference group:
+\[
+\tilde{\mu}_i = \mu_{ref,i}
+\]
+\[
+\tilde{\Sigma}_i = \Sigma_{ref,i}.
+\]
+
Last mean carried forward (LMCF): the patient’s outcome distribution is normally distributed with the following mean:
+\[ \tilde{\mu}_i = (\mu_i[1], \dots, \mu_i[\tilde{t}_i-1], \mu_i[\tilde{t}_i-1], \dots, \mu_i[\tilde{t}_i-1])'\]
+and covariance matrix: \[ \tilde{\Sigma}_i = \Sigma_i.\]
+
+
+
+
+3.4.3 Imputation of missing outcome data
+
+
The joint marginal multivariate normal imputation distribution of subject \(i\)’s observed and missing outcome data has mean \(\tilde{\mu}_i\) and covariance matrix \(\tilde{\Sigma}_i\) as defined above. The actual imputation of the missing outcome data is obtained by conditioning this marginal distribution on the subject’s observed outcome data. Of note, this approach is valid regardless whether the subject has intermittent or terminal missing data.
+
The conditional distribution used for the imputation is again a multivariate normal distribution and explicit formulas for the conditional mean and covariance are readily available. For completeness, we report them here with the notation and terminology of our setting. The marginal distribution for the outcome of patient \(i\) is \(Y_i \sim N(\tilde{\mu}_i, \tilde{\Sigma}_i)\) and the outcome \(Y_i\) can be decomposed in the observed (\(Y_{i,!}\)) and the unobserved (\(Y_{i,?}\)) components. Analogously the mean \(\tilde{\mu}_i\) can be decomposed as \((\tilde{\mu}_{i,!},\tilde{\mu}_{i,?})\) and the covariance \(\tilde{\Sigma}_i\) as:
+\[
+\tilde{\Sigma}_i =
+\begin{bmatrix}
+\tilde{\Sigma}_{i, !!} & \tilde{\Sigma}_{i,!?} \\
+\tilde{\Sigma}_{i, ?!} & \tilde{\Sigma}_{i, ??}
+\end{bmatrix}.
+\]
+The conditional distribution of \(Y_{i,?}\) conditional on \(Y_{i,!}\) is then a multivariate normal distribution with expectation
+\[
+E(Y_{i,?} \vert Y_{i,!})= \tilde{\mu}_{i,?} + \tilde{\Sigma}_{i, ?!} \tilde{\Sigma}_{i,!!}^{-1} (Y_{i,!} - \tilde{\mu}_{i,!})
+\]
+and covariance matrix
+\[
+Cov(Y_{i,?} \vert Y_{i,!}) = \tilde{\Sigma}_{i,??} - \tilde{\Sigma}_{i,?!} \tilde{\Sigma}_{i,!!}^{-1} \tilde{\Sigma}_{i,!?}.
+\]
+
Conventional random imputation consists in sampling from this conditional multivariate normal distribution. Conditional mean imputation imputes missing values with the deterministic conditional expectation \(E(Y_{i,?} \vert Y_{i,!})\).
+
+
+
+
+3.5\(\delta\)-adjustment
+
+
A marginal\(\delta\)-adjustment approach similar to the “five macros” in SAS is implemented (Roger (2021)), i.e. fixed non-stochastic values are added after the multivariate normal imputation step and prior to the analysis.
+This is relevant for sensitivity analyses in order to make imputed data systematically worse or better, respectively, than observed data. In addition, some authors have suggested \(\delta\)-type adjustments to implement a composite strategy for continuous outcomes (Darken et al. (2020)).
+
The implementation provides full flexibility regarding the specific implementation of the \(\delta\)-adjustment, i.e. the value that is added may depend on the randomized treatment group, the timing of the subject’s ICE, and other factors. For suggestions and case studies regarding this topic, we refer to Cro et al. (2020).
+
+
+
+3.6 Analysis step
+
+
After data imputation, a standard analysis model can be applied to the completed data resulting in a treatment effect estimate. As the imputed data no longer contains missing values, the analysis model is often simple. For example, it can be an analysis of covariance (ANCOVA) model with the outcome (or the change in the outcome from baseline) at a specific visit j as the dependent variable, the randomized treatment group as the primary covariate and, typically, adjustment for the same baseline covariates as for the imputation model.
+
+
+
+3.7 Pooling step for inference of (approximate) Bayesian MI and Rubin’s rules
+
+
Assume that the analysis model has been applied to \(M\) multiple imputed random datasets which resulted in \(m\) treatment effect estimates \(\hat{\theta}_m\) (\(m=1,\ldots,M\)) with corresponding standard error \(SE_m\) and (if available) degrees of freedom \(\nu_{com}\). If degrees of freedom are not available for an analysis model, set \(\nu_{com}=\infty\) for inference based on the normal distribution.
+
Rubin’s rules are used for pooling the treatment effect estimates and corresponding variances estimates from the analysis steps across the \(M\) multiple imputed datasets. According to Rubin’s rules, the final estimate of the treatment effect is calculated as the sample mean over the \(M\) treatment effect estimates:
+\[
+\hat{\theta} = \frac{1}{M} \sum_{m = 1}^M \hat{\theta}_m.
+\]
+The pooled variance is based on two components that reflect the within and the between variance of the treatment effects across the multiple imputed datasets:
+\[
+V(\hat{\theta}) = V_W(\hat{\theta}) + (1 + \frac{1}{M}) V_B(\hat{\theta})
+\]
+where \(V_W(\hat{\theta}) = \frac{1}{M}\sum_{m = 1}^M SE^2_m\) is the within-variance and \(V_B(\hat{\theta}) = \frac{1}{M-1} \sum_{m = 1}^M (\hat{\theta}_m - \hat{\theta})^2\) is the between-variance.
+
Confidence intervals and tests of the null hypothesis \(H_0: \theta=\theta_0\) are based on the \(t\)-statistics \(T\):
+
\[ T= (\hat{\theta}-\theta_0)/\sqrt{V(\hat{\theta})}. \]
+Under the null hypothesis, \(T\) has an approximate \(t\)-distribution with \(\nu\) degrees of freedom. \(\nu\) is calculated according to the Barnard and Rubin approximation, see Barnard and Rubin (1999) (formula 3) or Little and Rubin (2002) (formula (5.24), page 87):
+3.8 Bootstrap and jackknife inference for conditional mean imputation
+
+
+
+3.8.1 Point estimate of the treatment effect
+
+
The point estimator is obtained by applying the analysis model (Section 3.6) to a single conditional mean imputation of the missing data (see Section 3.4.3) based on the REML estimator of the parameters of the imputation model (see Section 3.3.2). We denote this treatment effect estimator by \(\hat{\theta}\).
+
As demonstrated in Wolbers et al. (2022) (Section 2.4), this treatment effect estimator is valid if the analysis model is an ANCOVA model or, more generally, if the treatment effect estimator is a linear function of the imputed outcome vector. Indeed, if this is the case, then the estimator is identical to the pooled treatment effect across multiple random REML imputation with an infinite number of imputations and corresponds to a computationally efficient implementation of a proposal by von Hippel and Bartlett (2021). We expect that the conditional mean imputation method is also applicable to some other analysis models (e.g. for general MMRM analysis models) but this has not been formally justified.
+
+
+
+3.8.2 Jackknife standard errors, confidence intervals (CI) and tests for the treatment effect
+
+
For a dataset containing \(n\) subjects, the jackknife standard error depends on treatment effect estimates \(\hat{\theta}_{(-b)}\) (\(b=1,\ldots,n\)) from samples of the original dataset which leave out the observation from subject \(b\). As described previously, to obtain treatment effect estimates for leave-one-subject-out datasets, all
+steps of the imputation procedure (i.e. imputation, conditional mean imputation, and analysis steps) need to be repeated on this new dataset.
+
Then, the jackknife standard error is defined as
+\[\hat{se}_{jack}=[\frac{(n-1)}{n}\cdot\sum_{b=1}^{n} (\hat{\theta}_{(-b)}-\bar{\theta}_{(.)})^2]^{1/2}\]
+where \(\bar{\theta}_{(.)}\) denotes the mean of all jackknife estimates (Efron and Tibshirani (1994), chapter 10). The corresponding two-sided normal approximation \(1-\alpha\) CI is defined as \(\hat{\theta}\pm z^{1-\alpha/2}\cdot \hat{se}_{jack}\) where \(\hat{\theta}\) is the treatment effect estimate from the original dataset. Tests of the null hypothesis \(H_0: \theta=\theta_0\) are then based on the \(Z\)-score \(Z=(\hat{\theta}-\theta_0)/\hat{se}_{jack}\) using a standard normal approximation.
+
A simulation study reported in Wolbers et al. (2022) demonstrated exact protection of the type I error for jackknife-based inference with a relatively low sample size (n = 100 per group) and a substantial amount of missing data (>25% of subjects with an ICE).
+
+
+
+3.8.3 Bootstrap standard errors, confidence intervals (CI) and tests for the treatment effect
+
+
As an alternative to the jackknife, the bootstrap has also been implemented in rbmi (Efron and Tibshirani (1994), Davison and Hinkley (1997)).
+
Two different bootstrap methods are implemented in rbmi: Methods based on the bootstrap standard error and the normal approximation and percentile bootstrap methods. Denote the treatment effect estimates from \(B\) bootstrap samples by \(\hat{\theta}^*_b\) (\(b=1,\ldots,B\)). The bootstrap standard error\(\hat{se}_{boot}\) is defined as the empirical standard deviation of the bootstrapped treatment effect estimates. Confidence intervals and tests based on the bootstrap standard error can then be constructed in the same way as for the jackknife. Confidence intervals using the percentile bootstrap are based on empirical quantiles of the bootstrap distribution and corresponding statistical tests are implemented in rbmi via inversion of the confidence interval. Explicit formulas for bootstrap inference as implemented in the rbmi package and some considerations regarding the required number of bootstrap samples are included in the Appendix of Wolbers et al. (2022).
+
A simulation study reported in Wolbers et al. (2022) demonstrated a small inflation of the type I error rate for inference based on the bootstrap standard error (up to \(5.3\%\) for a nominal type I error rate of \(5\%\)) for a sample size of n = 100 per group and a substantial amount of missing data (>25% of subjects with an ICE). Based on this simulations, we recommend the jackknife over the bootstrap for inference because it performed better in our simulation study and is typically much faster to
+compute than the bootstrap.
+
+
+
+
+3.9 Pooling step for inference of the bootstrapped MI methods
+
+
Assume that the analysis model has been applied to \(B\times D\) multiple imputed random datasets which resulted in \(B\times D\) treatment effect estimates \(\hat{\theta}_{bd}\) (\(b=1,\ldots,B\); \(d=1,\ldots,D\)).
+
The final estimate of the treatment effect is calculated as the sample mean over the \(B*D\) treatment effect estimates:
+\[
+\hat{\theta} = \frac{1}{BD} \sum_{b = 1}^B \sum_{d = 1}^D \hat{\theta}_{bd}.
+\]
+The pooled variance is based on two components that reflect the variability within and between imputed bootstrap samples (von Hippel and Bartlett (2021), formula 8.4):
+\[
+V(\hat{\theta}) = (1 + \frac{1}{B})\frac{MSB - MSW}{D} + \frac{MSW}{BD}
+\]
+
where \(MSB\) is the mean square between the bootstrapped datasets, and \(MSW\) is the mean square within the bootstrapped datasets and between the imputed datasets:
+
\[
+\begin{align*}
+MSB &= \frac{D}{B-1} \sum_{b = 1}^B (\bar{\theta_{b}} - \hat{\theta})^2 \\
+MSW &= \frac{1}{B(D-1)} \sum_{b = 1}^B \sum_{d = 1}^D (\theta_{bd} - \bar{\theta_b})^2
+\end{align*}
+\]
+where \(\bar{\theta_{b}}\) is the mean across the \(D\) estimates obtained from random imputation of the \(b\)-th bootstrap sample.
+
The degrees of freedom are estimated with the following formula (von Hippel and Bartlett (2021), formula 8.6):
Confidence intervals and tests of the null hypothesis \(H_0: \theta=\theta_0\) are based on the \(t\)-statistics \(T\):
+
\[ T= (\hat{\theta}-\theta_0)/\sqrt{V(\hat{\theta})}. \]
+Under the null hypothesis, \(T\) has an approximate \(t\)-distribution with \(\nu\) degrees of freedom.
+
+
+
+3.10 Comparison between the implemented approaches
+
+
+
+3.10.1 Treatment effect estimation
+
+
All approaches provide consistent treatment effect estimates for standard and reference-based imputation methods in case the analysis model of the completed datasets is a general linear model such as ANCOVA. Methods other than conditional mean imputation should also be valid for other analysis models. The validity of conditional mean imputation has only been formally demonstrated for analyses using the general linear model (Wolbers et al. (2022, sec. 2.4)) though it may also be applicable more widely (e.g. for general MMRM analysis models).
+
Treatment effects based on conditional mean imputation are deterministic. All other methods are affected by Monte Carlo sampling error and the precision of estimates depends on the number of imputations or bootstrap samples, respectively.
+
+
+
+3.10.2 Standard errors of the treatment effect
+
+
All approaches for imputation under a MAR assumption provide consistent estimates of the frequentist standard error.
+
For reference-based imputation methods, the situation is more complicated and two different types of variance estimators have been proposed in the statistical literature (Bartlett (2023)).
+The first is the frequentist variance which describes the actual repeated sampling variability of the estimator.
+If the reference-based missing data assumption is correctly specified, then the resulting inference based on this variance is correct in the frequentist sense, i.e. hypothesis tests have asymptotically correct type I error control and confidence intervals have correct coverage probabilities under repeated sampling (Bartlett (2023), Wolbers et al. (2022)).
+Reference-based missing data assumptions are strong and borrow information from the reference arm for imputation in the active arm. As a consequence, the size of frequentist standard errors for treatment effects may decrease with increasing amounts of missing data.
+The second proposal is the so-called “information-anchored” variance which was originally proposed in the context of sensitivity analyses (Cro, Carpenter, and Kenward (2019)). This variance estimator is based on disentangling point estimation and variance estimation altogether.
+The information-anchoring principle described in Cro, Carpenter, and Kenward (2019) states that the relative increase in the variance of the treatment effect estimator under MAR imputation with increasing amounts of missing data should be preserved for reference-based imputation methods.
+The resulting information-anchored variance is typically very similar to the variance under MAR imputation and typically increases with increasing amounts of missing data.
+However, the information-anchored variance does not reflect the actual variability of the reference-based estimator under repeated sampling and the resulting inference is highly conservative resulting in a substantial power loss (Wolbers et al. (2022)).
+Moreover, to date, no Bayesian or frequentist framework has been developed under which the information-anchored variance provides correct inference for reference-based missingness assumptions, nor is it clear whether such a framework can even be developed.
+
Reference-based conditional mean imputation (method_condmean()) and bootstrapped likelihood-based multiple methods (method = method_bmlmi()) obtain standard errors via resampling and hence target the frequentist variance (Wolbers et al. (2022), von Hippel and Bartlett (2021)).
+For finite samples, simulations for a sample size of \(n=100\) per group reported in Wolbers et al. (2022) demonstrated that conditional mean imputation combined with the jackknife (method_condmean(type = "jackknife")) provided exact protection of the type one error rate whereas the bootstrap (method_condmean(type = "bootstrap")) was associated with a small type I error inflation (between 5.1% to 5.3% for a nominal level of 5%).
+For reference-based conditional mean imputation, an alternative information-anchored variance can be obtained by following a proposal by Lu (2021).
+The basic idea of Lu (2021) is to obtain the information-anchored variance via a MAR imputation combined with a delta-adjustment where delta is selected in a data-driven way to match the reference-based estimator.
+For conditional mean imputation, the proposal by Lu (2021) can be implemented by choosing the delta-adjustment as the difference between the conditional mean imputation under the chosen reference-based assumption and MAR on the original dataset.
+An illustration of how the different variances can be obtained for conditional mean imputation in rbmi is provided in the vignette “Frequentist and information-anchored inference for reference-based conditional mean imputation” (vignette(topic = "CondMean_Inference", package = "rbmi")).
+
Reference-based Bayesian (or approximate Bayesian) multiple imputation methods combined with Rubin’s rules (method_bayes() and method_approxbayes()) target the information-anchored variance (Cro, Carpenter, and Kenward (2019)).
+A frequentist variance for these methods could in principle be obtained via bootstrap or jackknife re-sampling of the treatment effect estimates but this would be very computationally intensive and is not directly supported by rbmi.
+
Our view is that for primary analyses, accurate type I error control (which can be obtained by using the frequentist variance) is more important than adherence to the information anchoring principle which, to us, is
+not fully compatible with the strong reference-based assumptions. In any case, if reference-based imputation is used for the primary analysis, it is critical that the chosen
+reference-based assumption can be clinically justified, and that suitable sensitivity analyses are conducted to stress-test these assumptions.
+
Conditional mean imputation combined with the jackknife is the only method which leads to deterministic standard error estimates and, consequently, confidence intervals and \(p\)-values are also deterministic. This is particularly important in a regulatory setting where it is important to ascertain whether a calculated \(p\)-value which is close to the critical boundary of 5% is truly below or above that threshold rather than being uncertain about this because of Monte Carlo error.
+
+
+
+3.10.3 Computational complexity
+
+
Bayesian MI methods rely on the specification of prior distributions and the usage of Markov chain Monte Carlo (MCMC) methods.
+All other methods based on multiple imputation or bootstrapping require no other tuning parameters than the specification of the number of imputations \(M\) or bootstrap samples \(B\) and rely on numerical optimization for fitting the MMRM imputation models via REML. Conditional mean imputation combined with the jackknife has no tuning parameters.
+
In our rbmi implementation, the fitting of the MMRM imputation model via REML is computationally most expensive. MCMC sampling using rstan (Stan Development Team (2020)) is typically relatively fast in our setting and requires only a small burn-in and burn-between of the chains. In addition, the number of random imputations for reliable inference using Rubin’s rules is often smaller than the number of resamples required for the jackknife or the bootstrap (see e.g. the discussions in I. R. White, Royston, and Wood (2011, sec. 7) for Bayesian MI and the Appendix of Wolbers et al. (2022) for the bootstrap). Thus, for many applications, we expect that conventional MI based on Bayesian posterior draws will be fastest, followed by conventional MI using approximate Bayesian posterior draws and conditional mean imputation combined with the jackknife. Conditional mean imputation combined with the bootstrap and bootstrapped MI methods will typically be most computationally demanding. Of note, all implemented methods are conceptually straightforward to parallelise and some parallelisation support is provided by rbmi.
+
+
+
+
+
+4 Mapping of statistical methods to rbmi functions
+
+
For a full documentation of the rbmi package functionality we refer to the help pages of all functions and to the other package vignettes. Here we only give a brief overview of how the different steps of the imputation procedure are mapped to rbmi functions:
+
+
The base imputation model fitting step is implemented in the function draws(). The chosen MI approach can be set using the argument method and should be one of the following:
+
+
Bayesian posterior parameter draws from the imputation model are obtained via the argument method = method_bayes().
+
Approximate Bayesian posterior parameter draws from the imputation model are obtained via argument method = method_approxbayes().
+
ML or REML parameter estimates of the imputation model parameters for the original dataset and all leave-one-subject-out datasets (as required for the jackknife) are obtained via argument method = method_condmean(type = "jackknife").
+
ML or REML parameter estimates of the imputation model parameters for the original dataset and bootstrapped datasets are obtained via argument method = method_condmean(type = "bootstrap").
+
Bootstrapped MI methods are obtained via argument method = method_bmlmi(B=B, D=D) where \(B\) refers to the number of bootstrap samples and \(D\) to the number of random imputations for each bootstrap sample.
+
+
+
The imputation step using random imputation or deterministic conditional mean imputation, respectively, is implemented in function impute(). Imputation can be performed assuming the already implemented imputation strategies as presented in section 3.4. Additionally, user-defined imputation strategies are also supported.
+
The analysis step is implemented in function analyse() and applies the analysis model to all imputed datasets. By default, the analysis model (argument fun) is the ancova() function but alternative analysis functions can also be provided by the user. The analyse() function also allows for \(\delta\)-adjustments to the imputed datasets prior to the analysis via argument delta.
+
The inference step is implemented in function pool() which pools the results across imputed datasets. The Rubin and Bernard rule is applied in case of (approximate) Bayesian MI. For conditional mean imputation, jackknife and bootstrap (normal approximation or percentile) inference is supported. For BMLMI, the pooling and inference steps are performed via pool() which in this case implements the method described in Section 3.9.
+
+
+
+
+5 Comparison to other software implementations
+
+
An established software implementation of reference-based imputation in SAS are the so-called “five macros” by James Roger (Roger (2021)). An alternative R implementation which is also currently under development is the R package RefBasedMI (McGrath and White (2021)).
+
rbmi has several features which are not supported by the other implementations:
+
+
In addition to the Bayesian MI approach implemented also in the other packages, our implementation provides three alternative MI approaches: approximate Bayesian MI, conditional mean imputation combined with resampling, and bootstrapped MI.
+
rbmi allows for the usage of data collected after an ICE. For example, suppose that we want to adopt a treatment policy strategy for the ICE “treatment discontinuation”. A possible implementation of this strategy is to use the observed outcome data for subjects who remain in the study after the ICE and to use reference-based imputation in case the subject drops out. In our implementation, this is implemented by excluding observed post ICE data from the imputation model which assumes MAR missingness but including them in the analysis model. To our knowledge, this is not directly supported by the other implementations.
+
RefBasedMI fits the imputation model to data from each treatment group separately which implies covariate-treatment group interactions for all covariates for the pooled data from both treatment groups. In contrast, Roger’s five macros assume a joint model including data from all the randomized groups and covariate-treatment interactions covariates are not allowed. We also chose to implement a joint model but use a flexible model for the linear predictor which may or may not include an interaction term between any covariate and the treatment group. In addition, our imputation model also allows for the inclusion of time-varying covariates.
+
In our implementation, the grouping of the subjects for the purpose of the imputation model (and the definition of the reference group) does not need to correspond to the assigned treatment groups. This provides additional flexibility for the imputation procedure. It is not clear to us whether this feature is supported by Roger’s five macros or RefBasedMI.
+
We believe that our R-based implementation is more modular than RefBasedMI which should facilitate further package enhancements.
+
+
In contrast, the more general causal model introduced by I. White, Royes, and Best (2020) is available in the other implementations but is currently not supported by ours.
+
+
+
References
+
+
+
+Barnard, John, and Donald B Rubin. 1999. “Miscellanea. Small-Sample Degrees of Freedom with Multiple Imputation.”Biometrika 86 (4): 948–55.
+
+
+Bartlett, Jonathan W. 2023. “Reference-Based Multiple Imputation - What Is the Right Variance and How to Estimate It.”Statistics in Biopharmaceutical Research 15 (1): 178–86.
+
+
+Bell, James, Thomas Drury, Tobias Mütze, Christian Bressen Pipper, Lorenzo Guizzaro, Marian Mitroiu, Khadija Rerhou Rantell, Marcel Wolbers, and David Wright. 2024. “Estimation Methods for Estimands Using the Treatment Policy Strategy; a Simulation Study Based on the PIONEER 1 Trial.”arXiv Preprint. https://arxiv.org/abs/2402.12850.
+
+
+Carpenter, James R, James H Roger, and Michael G Kenward. 2013. “Analysis of Longitudinal Trials with Protocol Deviation: A Framework for Relevant, Accessible Assumptions, and Inference via Multiple Imputation.”Journal of Biopharmaceutical Statistics 23 (6): 1352–71.
+
+
+Cro, Suzie, James R Carpenter, and Michael G Kenward. 2019. “Information-Anchored Sensitivity Analysis: Theory and Application.”Journal of the Royal Statistical Society: Series A (Statistics in Society) 182 (2): 623–45.
+
+
+Cro, Suzie, Tim P Morris, Michael G Kenward, and James R Carpenter. 2020. “Sensitivity Analysis for Clinical Trials with Missing Continuous Outcome Data Using Controlled Multiple Imputation: A Practical Guide.”Statistics in Medicine 39 (21): 2815–42.
+
+
+Darken, Patrick, Jack Nyberg, Shaila Ballal, and David Wright. 2020. “The Attributable Estimand: A New Approach to Account for Intercurrent Events.”Pharmaceutical Statistics 19 (5): 626–35.
+
+
+Davison, Anthony C, and David V Hinkley. 1997. Bootstrap Methods and Their Application. Cambridge University Press.
+
+
+Drury, Thomas, Juan J Abellan, Nicky Best, and Ian R White. 2024. “Estimation of Treatment Policy Estimands for Continuous Outcomes Using Off-Treatment Sequential Multiple Imputation.”Pharmaceutical Statistics.
+
+
+Efron, Bradley. 1994. “Missing Data, Imputation, and the Bootstrap.”Journal of the American Statistical Association 89 (426): 463–75.
+
+
+Efron, Bradley, and Robert J Tibshirani. 1994. An Introduction to the Bootstrap. CRC press.
+
+
+Guizzaro, Lorenzo, Frank Pétavy, Robin Ristl, and Ciro Gallo. 2021. “The Use of a Variable Representing Compliance Improves Accuracy of Estimation of the Effect of Treatment Allocation Regardless of Discontinuation in Trials with Incomplete Follow-up.”Statistics in Biopharmaceutical Research 13 (1): 119–27.
+
+
+Honaker, James, and Gary King. 2010. “What to Do about Missing Values in Time-Series Cross-Section Data.”American Journal of Political Science 54 (2): 561–81.
+
+
+ICH E9 working group. 2019. “ICH E9 (R1): Addendum on estimands and sensitivity analysis in clinical trials to the guideline on statistical principles for clinical trials.” International Council for Harmonisation of Technical Requirements for Pharmaceuticals for Human Use. 2019. https://database.ich.org/sites/default/files/E9-R1_Step4_Guideline_2019_1203.pdf.
+
+
+Little, Roderick JA, and Donald B Rubin. 2002. Statistical Analysis with Missing Data, Second Edition. John Wiley & Sons.
+
+
+Lu, Kaifeng. 2021. “An Alternative Implementation of Reference-Based Controlled Imputation Procedures.”Statistics in Biopharmaceutical Research 13 (4): 483–91.
+
+
+Mallinckrodt, CH, J Bell, G Liu, B Ratitch, M O’Kelly, I Lipkovich, P Singh, L Xu, and G Molenberghs. 2020. “Aligning Estimators with Estimands in Clinical Trials: Putting the ICH E9 (R1) Guidelines into Practice.”Therapeutic Innovation & Regulatory Science 54 (2): 353–64.
+
+
+McGrath, Kevin, and Ian White. 2021. “RefBasedMI: Reference-Based Imputation for Longitudinal Clinical Trials with Protocol Deviation.”https://github.com/UCL/RefbasedMI.
+
+
+Noci, Alessandro, Marcel Wolbers, Markus Abt, Corine Baayen, Hans Ulrich Burger, Man Jin, and Weining Zhao Robieson. 2023. “A Comparison of Estimand and Estimation Strategies for Clinical Trials in Early Parkinson’s Disease.”Statistics in Biopharmaceutical Research 15 (3): 491–501.
+
+
+Patterson, H Desmond, and Robin Thompson. 1971. “Recovery of Inter-Block Information When Block Sizes Are Unequal.”Biometrika 58 (3): 545–54.
+
+
+Polverejan, Elena, and Vladimir Dragalin. 2020. “Aligning Treatment Policy Estimands and Estimators—a Simulation Study in Alzheimer’s Disease.”Statistics in Biopharmaceutical Research 12 (2): 142–54.
+
+Stan Development Team. 2020. “RStan: The R Interface to Stan.”https://mc-stan.org/.
+
+
+von Hippel, Paul T, and Jonathan W Bartlett. 2021. “Maximum Likelihood Multiple Imputation: Faster Imputations and Consistent Standard Errors Without Posterior Draws.”Statistical Science 36 (3): 400–420.
+
+
+White, Ian R, Patrick Royston, and Angela M Wood. 2011. “Multiple Imputation Using Chained Equations: Issues and Guidance for Practice.”Statistics in Medicine 30 (4): 377–99.
+
+
+White, Ian, Joseph Royes, and Nicky Best. 2020. “A Causal Modelling Framework for Reference-Based Imputation and Tipping Point Analysis in Clinical Trials with Quantitative Outcome.”Journal of Biopharmaceutical Statistics 30 (2): 334–50.
+
+
+Wolbers, Marcel, Alessandro Noci, Paul Delmar, Craig Gower-Page, Sean Yiu, and Jonathan W Bartlett. 2022. “Standard and Reference-Based Conditional Mean Imputation.”Pharmaceutical Statistics 21 (6): 1246–57.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v1.3.1/authors.html b/v1.3.1/authors.html
new file mode 100644
index 000000000..c8be70fad
--- /dev/null
+++ b/v1.3.1/authors.html
@@ -0,0 +1,120 @@
+
+Authors and Citation • rbmi
+ Skip to contents
+
+
+
+
+
+
Authors and Citation
+
+
+
+
Authors
+
+
+
Craig Gower-Page. Author, maintainer.
+
+
+
+
Alessandro Noci. Author.
+
+
+
+
Marcel Wolbers. Contributor.
+
+
+
+
Isaac Gravestock. Author.
+
+
+
+
F. Hoffmann-La Roche AG. Copyright holder, funder.
+
Gower-Page C, Noci A, Gravestock I (2024).
+rbmi: Reference Based Multiple Imputation.
+R package version 1.3.1, https://github.com/insightsengineering/rbmi, https://insightsengineering.github.io/rbmi/.
+
+
@Manual{,
+ title = {rbmi: Reference Based Multiple Imputation},
+ author = {Craig Gower-Page and Alessandro Noci and Isaac Gravestock},
+ year = {2024},
+ note = {R package version 1.3.1, https://github.com/insightsengineering/rbmi},
+ url = {https://insightsengineering.github.io/rbmi/},
+}
+
Gower-Page C, Noci A, Wolbers M (2022).
+“rbmi: A R package for standard and reference-based multiple imputation methods.”
+Journal of Open Source Software, 7(74), 4251.
+doi:10.21105/joss.04251, https://doi.org/10.21105/joss.04251.
+
+
@Article{,
+ title = {rbmi: A R package for standard and reference-based multiple imputation methods},
+ author = {Craig Gower-Page and Alessandro Noci and Marcel Wolbers},
+ year = {2022},
+ publisher = {The Open Journal},
+ doi = {10.21105/joss.04251},
+ url = {https://doi.org/10.21105/joss.04251},
+ volume = {7},
+ number = {74},
+ pages = {4251},
+ journal = {Journal of Open Source Software},
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v1.3.1/deps/MathJax-3.2.2/tex-chtml.min.js b/v1.3.1/deps/MathJax-3.2.2/tex-chtml.min.js
new file mode 100644
index 000000000..043aa25b7
--- /dev/null
+++ b/v1.3.1/deps/MathJax-3.2.2/tex-chtml.min.js
@@ -0,0 +1,3 @@
+!function(){"use strict";var __webpack_modules__={351:function(t,e,r){var n,o,a=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__assign||function(){return(s=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},p=(Object.defineProperty(e,"__esModule",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0,r(4474)),i=r(9259),h=r(7233),d=(o=i.SerializedMmlVisitor,a(f,o),f.prototype.getAttributes=function(t){return o.prototype.getAttributes.call(this,t).replace(/ ?id=".*?"/,"")},f);function f(){return null!==o&&o.apply(this,arguments)||this}function m(t){return a(e,r=t),e.prototype.assistiveMml=function(t,e){void 0===e&&(e=!1),this.state()>=p.STATE.ASSISTIVEMML||(this.isEscaped||!t.options.enableAssistiveMml&&!e||(e=t.adaptor,t=t.toMML(this.root).replace(/\n */g,"").replace(//g,""),t=e.firstChild(e.body(e.parse(t,"text/html"))),t=e.node("mjx-assistive-mml",{unselectable:"on",display:this.display?"block":"inline"},[t]),e.setAttribute(e.firstChild(this.typesetRoot),"aria-hidden","true"),e.setStyle(this.typesetRoot,"position","relative"),e.append(this.typesetRoot,t)),this.state(p.STATE.ASSISTIVEMML))},e;function e(){return null!==r&&r.apply(this,arguments)||this}var r}function y(t){var e,i;return a(r,i=t),r.prototype.toMML=function(t){return this.visitor.visitTree(t)},r.prototype.assistiveMml=function(){var t,e;if(!this.processed.isSet("assistive-mml")){try{for(var r=u(this.math),n=r.next();!n.done;n=r.next())n.value.assistiveMml(this)}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}this.processed.set("assistive-mml")}return this},r.prototype.state=function(t,e){return i.prototype.state.call(this,t,e=void 0===e?!1:e),ts[0]&&e[1]=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLAdaptor=void 0,o=r(5009).AbstractDOMAdaptor,i(a,o),a.prototype.parse=function(t,e){return this.parser.parseFromString(t,e=void 0===e?"text/html":e)},a.prototype.create=function(t,e){return e?this.document.createElementNS(e,t):this.document.createElement(t)},a.prototype.text=function(t){return this.document.createTextNode(t)},a.prototype.head=function(t){return t.head||t},a.prototype.body=function(t){return t.body||t},a.prototype.root=function(t){return t.documentElement||t},a.prototype.doctype=function(t){return t.doctype?""):""},a.prototype.tags=function(t,e,r){r=(r=void 0===r?null:r)?t.getElementsByTagNameNS(r,e):t.getElementsByTagName(e);return Array.from(r)},a.prototype.getElements=function(t,e){var r,n,o=[];try{for(var i=l(t),a=i.next();!a.done;a=i.next()){var s=a.value;"string"==typeof s?o=o.concat(Array.from(this.document.querySelectorAll(s))):Array.isArray(s)||s instanceof this.window.NodeList||s instanceof this.window.HTMLCollection?o=o.concat(Array.from(s)):o.push(s)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return o},a.prototype.contains=function(t,e){return t.contains(e)},a.prototype.parent=function(t){return t.parentNode},a.prototype.append=function(t,e){return t.appendChild(e)},a.prototype.insert=function(t,e){return this.parent(e).insertBefore(t,e)},a.prototype.remove=function(t){return this.parent(t).removeChild(t)},a.prototype.replace=function(t,e){return this.parent(e).replaceChild(t,e)},a.prototype.clone=function(t){return t.cloneNode(!0)},a.prototype.split=function(t,e){return t.splitText(e)},a.prototype.next=function(t){return t.nextSibling},a.prototype.previous=function(t){return t.previousSibling},a.prototype.firstChild=function(t){return t.firstChild},a.prototype.lastChild=function(t){return t.lastChild},a.prototype.childNodes=function(t){return Array.from(t.childNodes)},a.prototype.childNode=function(t,e){return t.childNodes[e]},a.prototype.kind=function(t){var e=t.nodeType;return 1===e||3===e||8===e?t.nodeName.toLowerCase():""},a.prototype.value=function(t){return t.nodeValue||""},a.prototype.textContent=function(t){return t.textContent},a.prototype.innerHTML=function(t){return t.innerHTML},a.prototype.outerHTML=function(t){return t.outerHTML},a.prototype.serializeXML=function(t){return(new this.window.XMLSerializer).serializeToString(t)},a.prototype.setAttribute=function(t,e,r,n){return(n=void 0===n?null:n)?(e=n.replace(/.*\//,"")+":"+e.replace(/^.*:/,""),t.setAttributeNS(n,e,r)):t.setAttribute(e,r)},a.prototype.getAttribute=function(t,e){return t.getAttribute(e)},a.prototype.removeAttribute=function(t,e){return t.removeAttribute(e)},a.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},a.prototype.allAttributes=function(t){return Array.from(t.attributes).map(function(t){return{name:t.name,value:t.value}})},a.prototype.addClass=function(t,e){t.classList?t.classList.add(e):t.className=(t.className+" "+e).trim()},a.prototype.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.split(/ /).filter(function(t){return t!==e}).join(" ")},a.prototype.hasClass=function(t,e){return t.classList?t.classList.contains(e):0<=t.className.split(/ /).indexOf(e)},a.prototype.setStyle=function(t,e,r){t.style[e]=r},a.prototype.getStyle=function(t,e){return t.style[e]},a.prototype.allStyles=function(t){return t.style.cssText},a.prototype.insertRules=function(t,e){var r,n;try{for(var o=l(e.reverse()),i=o.next();!i.done;i=o.next()){var a=i.value;try{t.sheet.insertRule(a,0)}catch(t){console.warn("MathJax: can't insert css rule '".concat(a,"': ").concat(t.message))}}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},a.prototype.fontSize=function(t){t=this.window.getComputedStyle(t);return parseFloat(t.fontSize)},a.prototype.fontFamily=function(t){return this.window.getComputedStyle(t).fontFamily||""},a.prototype.nodeSize=function(t,e,r){return void 0===e&&(e=1),(r=void 0===r?!1:r)&&t.getBBox?[(r=t.getBBox()).width/e,r.height/e]:[t.offsetWidth/e,t.offsetHeight/e]},a.prototype.nodeBBox=function(t){t=t.getBoundingClientRect();return{left:t.left,right:t.right,top:t.top,bottom:t.bottom}},a);function a(t){var e=o.call(this,t.document)||this;return e.window=t,e.parser=new t.DOMParser,e}e.HTMLAdaptor=r},6191:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.browserAdaptor=void 0;var n=r(444);e.browserAdaptor=function(){return new n.HTMLAdaptor(window)}},9515:function(t,e,r){var c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=(Object.defineProperty(e,"__esModule",{value:!0}),e.MathJax=e.combineWithMathJax=e.combineDefaults=e.combineConfig=e.isObject=void 0,r(3282));function u(t){return"object"==typeof t&&null!==t}function s(t,e){var r,n;try{for(var o=c(Object.keys(e)),i=o.next();!i.done;i=o.next()){var a=i.value;"__esModule"!==a&&(!u(t[a])||!u(e[a])||e[a]instanceof Promise?null!==e[a]&&void 0!==e[a]&&(t[a]=e[a]):s(t[a],e[a]))}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return t}e.isObject=u,e.combineConfig=s,e.combineDefaults=function t(e,r,n){var o,i;e[r]||(e[r]={}),e=e[r];try{for(var a=c(Object.keys(n)),s=a.next();!s.done;s=a.next()){var l=s.value;u(e[l])&&u(n[l])?t(e,l,n[l]):null==e[l]&&null!=n[l]&&(e[l]=n[l])}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return e},e.combineWithMathJax=function(t){return s(e.MathJax,t)},void 0===r.g.MathJax&&(r.g.MathJax={}),r.g.MathJax.version||(r.g.MathJax={version:n.VERSION,_:{},config:r.g.MathJax}),e.MathJax=r.g.MathJax},235:function(t,l,e){var r,n,c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=(Object.defineProperty(l,"__esModule",{value:!0}),l.CONFIG=l.MathJax=l.Loader=l.PathFilters=l.PackageError=l.Package=void 0,e(9515)),u=e(265),i=e(265);Object.defineProperty(l,"Package",{enumerable:!0,get:function(){return i.Package}}),Object.defineProperty(l,"PackageError",{enumerable:!0,get:function(){return i.PackageError}});var a,s,p,e=e(7525);if(l.PathFilters={source:function(t){return l.CONFIG.source.hasOwnProperty(t.name)&&(t.name=l.CONFIG.source[t.name]),!0},normalize:function(t){var e=t.name;return e.match(/^(?:[a-z]+:\/)?\/|[a-z]:\\|\[/i)||(t.name="[mathjax]/"+e.replace(/^\.\//,"")),t.addExtension&&!e.match(/\.[^\/]+$/)&&(t.name+=".js"),!0},prefix:function(t){for(var e;(e=t.name.match(/^\[([^\]]*)\]/))&&l.CONFIG.paths.hasOwnProperty(e[1]);)t.name=l.CONFIG.paths[e[1]]+t.name.substr(e[0].length);return!0}},s=a=l.Loader||(l.Loader={}),p=o.MathJax.version,s.versions=new Map,s.ready=function(){for(var t,e,r=[],n=0;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},h=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractDOMAdaptor=void 0,n.prototype.node=function(t,e,r,n){void 0===e&&(e={}),void 0===r&&(r=[]);var o,i,a=this.create(t,n);this.setAttributes(a,e);try{for(var s=m(r),l=s.next();!l.done;l=s.next()){var c=l.value;this.append(a,c)}}catch(t){o={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}return a},n.prototype.setAttributes=function(t,e){var r,n,o,i,a,s;if(e.style&&"string"!=typeof e.style)try{for(var l=m(Object.keys(e.style)),c=l.next();!c.done;c=l.next()){var u=c.value;this.setStyle(t,u.replace(/-([a-z])/g,function(t,e){return e.toUpperCase()}),e.style[u])}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}if(e.properties)try{for(var p=m(Object.keys(e.properties)),h=p.next();!h.done;h=p.next())t[u=h.value]=e.properties[u]}catch(t){o={error:t}}finally{try{h&&!h.done&&(i=p.return)&&i.call(p)}finally{if(o)throw o.error}}try{for(var d=m(Object.keys(e)),f=d.next();!f.done;f=d.next())"style"===(u=f.value)&&"string"!=typeof e.style||"properties"===u||this.setAttribute(t,u,e[u])}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=d.return)&&s.call(d)}finally{if(a)throw a.error}}},n.prototype.replace=function(t,e){return this.insert(t,e),this.remove(e),e},n.prototype.childNode=function(t,e){return this.childNodes(t)[e]},n.prototype.allClasses=function(t){t=this.getAttribute(t,"class");return t?t.replace(/ +/g," ").replace(/^ /,"").replace(/ $/,"").split(/ /):[]},n);function n(t){this.document=t=void 0===t?null:t}e.AbstractDOMAdaptor=r},3494:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractFindMath=void 0;var n=r(7233);function o(t){var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t)}o.OPTIONS={},e.AbstractFindMath=o},3670:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractHandler=void 0,o=r(5722).AbstractMathDocument,i(l,o),l);function s(t,e){void 0===e&&(e=5),this.documentClass=a,this.adaptor=t,this.priority=e}function l(){return null!==o&&o.apply(this,arguments)||this}Object.defineProperty(s.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),s.prototype.handlesDocument=function(t){return!1},s.prototype.create=function(t,e){return new this.documentClass(t,this.adaptor,e)},s.NAME="generic",e.AbstractHandler=s},805:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.HandlerList=void 0,o=r(8666).PrioritizedList,i(s,o),s.prototype.register=function(t){return this.add(t,t.priority)},s.prototype.unregister=function(t){this.remove(t)},s.prototype.handlesDocument=function(t){var e,r;try{for(var n=a(this),o=n.next();!o.done;o=n.next()){var i=o.value.item;if(i.handlesDocument(t))return i}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}throw new Error("Can't find handler for document")},s.prototype.document=function(t,e){return void 0===e&&(e=null),this.handlesDocument(t).create(t,e)},s);function s(){return null!==o&&o.apply(this,arguments)||this}e.HandlerList=r},9206:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractInputJax=void 0;var n=r(7233),o=r(7525);function i(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t),this.preFilters=new o.FunctionList,this.postFilters=new o.FunctionList}Object.defineProperty(i.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),i.prototype.setAdaptor=function(t){this.adaptor=t},i.prototype.setMmlFactory=function(t){this.mmlFactory=t},i.prototype.initialize=function(){},i.prototype.reset=function(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=e&&a.item.renderDoc(t))return}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},g.prototype.renderMath=function(t,e,r){var n,o;void 0===r&&(r=h.STATE.UNPROCESSED);try{for(var i=f(this.items),a=i.next();!a.done;a=i.next()){var s=a.value;if(s.priority>=r&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{a&&!a.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}},g.prototype.renderConvert=function(t,e,r){var n,o;void 0===r&&(r=h.STATE.LAST);try{for(var i=f(this.items),a=i.next();!a.done;a=i.next()){var s=a.value;if(s.priority>r)return;if(s.item.convert&&s.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{a&&!a.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}},g.prototype.findID=function(t){var e,r;try{for(var n=f(this.items),o=n.next();!o.done;o=n.next()){var i=o.value;if(i.item.id===t)return i.item}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},g);function g(){return null!==o&&o.apply(this,arguments)||this}r.RenderList=y,r.resetOptions={all:!1,processed:!1,inputJax:null,outputJax:null},r.resetAllOptions={all:!0,processed:!0,inputJax:[],outputJax:[]};S=s.AbstractInputJax,i(N,S),N.prototype.compile=function(t){return null};var b,v,_,S,O=N,M=(_=l.AbstractOutputJax,i(T,_),T.prototype.typeset=function(t,e){return null},T.prototype.escaped=function(t,e){return null},T),x=(v=c.AbstractMathList,i(C,v),C),e=(b=h.AbstractMathItem,i(A,b),A),s=(Object.defineProperty(E.prototype,"kind",{get:function(){return this.constructor.KIND},enumerable:!1,configurable:!0}),E.prototype.addRenderAction=function(t){for(var e=[],r=1;r=e&&this.state(e-1),t.renderActions.renderMath(this,t,e)},e.prototype.convert=function(t,e){void 0===e&&(e=i.STATE.LAST),t.renderActions.renderConvert(this,t,e)},e.prototype.compile=function(t){this.state()=i.STATE.INSERTED&&this.removeFromDocument(e),t=i.STATE.TYPESET&&(this.outputData={}),t=i.STATE.COMPILED&&(this.inputData={}),this._state=t),this._state},e.prototype.reset=function(t){this.state(i.STATE.UNPROCESSED,t=void 0===t?!1:t)},i.AbstractMathItem=e,i.STATE={UNPROCESSED:0,FINDMATH:10,COMPILED:20,CONVERT:100,METRICS:110,RERENDER:125,TYPESET:150,INSERTED:200,LAST:1e4},i.newState=function(t,e){if(t in i.STATE)throw Error("State "+t+" already exists");i.STATE[t]=e}},9e3:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),r=(Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMathList=void 0,o=r(103).LinkedList,i(a,o),a.prototype.isBefore=function(t,e){return t.start.i=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},e=(Object.defineProperty(r,"__esModule",{value:!0}),r.Attributes=r.INHERIT=void 0,r.INHERIT="_inherit_",n.prototype.set=function(t,e){this.attributes[t]=e},n.prototype.setList=function(t){Object.assign(this.attributes,t)},n.prototype.get=function(t){var e=this.attributes[t];return e=e===r.INHERIT?this.global[t]:e},n.prototype.getExplicit=function(t){if(this.attributes.hasOwnProperty(t))return this.attributes[t]},n.prototype.getList=function(){for(var t,e,r=[],n=0;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.MathMLVisitor=void 0,o=r(6325).MmlVisitor,i(a,o),a.prototype.visitTree=function(t,e){e=(this.document=e).createElement("top");return this.visitNode(t,e),this.document=null,e.firstChild},a.prototype.visitTextNode=function(t,e){e.appendChild(this.document.createTextNode(t.getText()))},a.prototype.visitXMLNode=function(t,e){e.appendChild(t.getXML().cloneNode(!0))},a.prototype.visitInferredMrowNode=function(t,e){var r,n;try{for(var o=c(t.childNodes),i=o.next();!i.done;i=o.next()){var a=i.value;this.visitNode(a,e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},a.prototype.visitDefault=function(t,e){var r,n,o=this.document.createElement(t.kind);this.addAttributes(t,o);try{for(var i=c(t.childNodes),a=i.next();!a.done;a=i.next()){var s=a.value;this.visitNode(s,o)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}e.appendChild(o)},a.prototype.addAttributes=function(t,e){var r,n,o=t.attributes,i=o.getExplicitNames();try{for(var a=c(i),s=a.next();!s.done;s=a.next()){var l=s.value;e.setAttribute(l,o.getExplicit(l).toString())}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},a);function a(){var t=null!==o&&o.apply(this,arguments)||this;return t.document=null,t}e.MathMLVisitor=r},3909:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlFactory=void 0,r(7860)),r=r(6336),a=(o=a.AbstractNodeFactory,i(s,o),Object.defineProperty(s.prototype,"MML",{get:function(){return this.node},enumerable:!1,configurable:!0}),s.defaultNodes=r.MML,s);function s(){return null!==o&&o.apply(this,arguments)||this}e.MmlFactory=a},9007:function(t,s,e){var n,l,r=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__assign||function(){return(d=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},m=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0this.childNodes.length&&(t=1),this.attributes.set("selection",t)},s.defaults=a(a({},r.AbstractMmlNode.defaults),{actiontype:"toggle",selection:1}),s);function s(){return null!==o&&o.apply(this,arguments)||this}e.MmlMaction=i},142:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},p=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfenced=void 0,r(9007)),r=(c=p.AbstractMmlNode,o(a,c),Object.defineProperty(a.prototype,"kind",{get:function(){return"mfenced"},enumerable:!1,configurable:!0}),a.prototype.setTeXclass=function(t){this.getPrevClass(t),this.open&&(t=this.open.setTeXclass(t)),this.childNodes[0]&&(t=this.childNodes[0].setTeXclass(t));for(var e=1,r=this.childNodes.length;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfrac=void 0,r(9007)),i=(o=r.AbstractMmlBaseNode,i(l,o),Object.defineProperty(l.prototype,"kind",{get:function(){return"mfrac"},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"arity",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),l.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=s(this.childNodes),o=n.next();!o.done;o=n.next())o.value.setTeXclass(null)}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},l.prototype.setChildInheritedAttributes=function(t,e,r,n){(!e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMo=void 0,r(9007)),d=r(4082),l=r(505),r=(o=s.AbstractMmlTokenNode,i(c,o),Object.defineProperty(c.prototype,"texClass",{get:function(){var t,e,r,n,o;return null===this._texClass?(t=this.getText(),o=(r=p(this.handleExplicitForm(this.getForms()),3))[0],e=r[1],r=r[2],(o=(n=this.constructor.OPTABLE)[o][t]||n[e][t]||n[r][t])?o[2]:s.TEXCLASS.REL):this._texClass},set:function(t){this._texClass=t},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"kind",{get:function(){return"mo"},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"isEmbellished",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"hasNewLine",{get:function(){return"newline"===this.attributes.get("linebreak")},enumerable:!1,configurable:!0}),c.prototype.coreParent=function(){for(var t=this,e=this,r=this.factory.getNodeClass("math");e&&e.isEmbellished&&e.coreMO()===this&&!(e instanceof r);)e=(t=e).parent;return t},c.prototype.coreText=function(t){if(!t)return"";if(t.isEmbellished)return t.coreMO().getText();for(;((t.isKind("mrow")||t.isKind("TeXAtom")&&t.texClass!==s.TEXCLASS.VCENTER||t.isKind("mstyle")||t.isKind("mphantom"))&&1===t.childNodes.length||t.isKind("munderover"))&&t.childNodes[0];)t=t.childNodes[0];return t.isToken?t.getText():""},c.prototype.hasSpacingAttributes=function(){return this.attributes.isSet("lspace")||this.attributes.isSet("rspace")},Object.defineProperty(c.prototype,"isAccent",{get:function(){var t,e=!1,r=this.coreParent().parent;return e=r&&(t=r.isKind("mover")?r.childNodes[r.over].coreMO()?"accent":"":r.isKind("munder")?r.childNodes[r.under].coreMO()?"accentunder":"":r.isKind("munderover")?this===r.childNodes[r.over].coreMO()?"accent":this===r.childNodes[r.under].coreMO()?"accentunder":"":"")?void 0!==r.attributes.getExplicit(t)?e:this.attributes.get("accent"):e},enumerable:!1,configurable:!0}),c.prototype.setTeXclass=function(t){var e=this.attributes.getList("form","fence"),r=e.form,e=e.fence;return void 0===this.getProperty("texClass")&&(this.attributes.isSet("lspace")||this.attributes.isSet("rspace"))?null:(e&&this.texClass===s.TEXCLASS.REL&&("prefix"===r&&(this.texClass=s.TEXCLASS.OPEN),"postfix"===r&&(this.texClass=s.TEXCLASS.CLOSE)),this.adjustTeXclass(t))},c.prototype.adjustTeXclass=function(t){var e=this.texClass,r=this.prevClass;if(e===s.TEXCLASS.NONE)return t;if(t?(!t.getProperty("autoOP")||e!==s.TEXCLASS.BIN&&e!==s.TEXCLASS.REL||(r=t.texClass=s.TEXCLASS.ORD),r=this.prevClass=t.texClass||s.TEXCLASS.ORD,this.prevLevel=this.attributes.getInherited("scriptlevel")):r=this.prevClass=s.TEXCLASS.NONE,e!==s.TEXCLASS.BIN||r!==s.TEXCLASS.NONE&&r!==s.TEXCLASS.BIN&&r!==s.TEXCLASS.OP&&r!==s.TEXCLASS.REL&&r!==s.TEXCLASS.OPEN&&r!==s.TEXCLASS.PUNCT)if(r!==s.TEXCLASS.BIN||e!==s.TEXCLASS.REL&&e!==s.TEXCLASS.CLOSE&&e!==s.TEXCLASS.PUNCT){if(e===s.TEXCLASS.BIN){for(var n=this,o=this.parent;o&&o.parent&&o.isEmbellished&&(1===o.childNodes.length||!o.isKind("mrow")&&o.core()===n);)o=(n=o).parent;o.childNodes[o.childNodes.length-1]===n&&(this.texClass=s.TEXCLASS.ORD)}}else t.texClass=this.prevClass=s.TEXCLASS.ORD;else this.texClass=s.TEXCLASS.ORD;return this},c.prototype.setInheritedAttributes=function(t,e,r,n){o.prototype.setInheritedAttributes.call(this,t=void 0===t?{}:t,e=void 0===e?!1:e,r=void 0===r?0:r,n=void 0===n?!1:n);t=this.getText();this.checkOperatorTable(t),this.checkPseudoScripts(t),this.checkPrimes(t),this.checkMathAccent(t)},c.prototype.checkOperatorTable=function(t){var e,r,n=p(this.handleExplicitForm(this.getForms()),3),o=n[0],i=n[1],n=n[2],a=(this.attributes.setInherited("form",o),this.constructor.OPTABLE),s=a[o][t]||a[i][t]||a[n][t];if(s){void 0===this.getProperty("texClass")&&(this.texClass=s[2]);try{for(var l=h(Object.keys(s[3]||{})),c=l.next();!c.done;c=l.next()){var u=c.value;this.attributes.setInherited(u,s[3][u])}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}this.lspace=(s[0]+1)/18,this.rspace=(s[1]+1)/18}else{o=(0,d.getRange)(t);o&&(void 0===this.getProperty("texClass")&&(this.texClass=o[2]),i=this.constructor.MMLSPACING[o[2]],this.lspace=(i[0]+1)/18,this.rspace=(i[1]+1)/18)}},c.prototype.getForms=function(){for(var t=this,e=this.parent,r=this.Parent;r&&r.isEmbellished;)t=e,e=r.parent,r=r.Parent;if(e&&e.isKind("mrow")&&1!==e.nonSpaceLength()){if(e.firstNonSpace()===t)return["prefix","infix","postfix"];if(e.lastNonSpace()===t)return["postfix","infix","prefix"]}return["infix","prefix","postfix"]},c.prototype.handleExplicitForm=function(t){var e;return t=this.attributes.isSet("form")?[e=this.attributes.get("form")].concat(t.filter(function(t){return t!==e})):t},c.prototype.checkPseudoScripts=function(t){var e=this.constructor.pseudoScripts;t.match(e)&&(e=!(t=this.coreParent().Parent)||!(t.isKind("msubsup")&&!t.isKind("msub")),this.setProperty("pseudoscript",e),e&&(this.attributes.setInherited("lspace",0),this.attributes.setInherited("rspace",0)))},c.prototype.checkPrimes=function(t){var e,r=this.constructor.primes;t.match(r)&&(e=this.constructor.remapPrimes,r=(0,l.unicodeString)((0,l.unicodeChars)(t).map(function(t){return e[t]})),this.setProperty("primes",r))},c.prototype.checkMathAccent=function(t){var e=this.Parent;void 0===this.getProperty("mathaccent")&&e&&e.isKind("munderover")&&((e=e.childNodes[0]).isEmbellished&&e.coreMO()===this||(e=this.constructor.mathaccents,t.match(e)&&this.setProperty("mathaccent",!0)))},c.defaults=a(a({},s.AbstractMmlTokenNode.defaults),{form:"infix",fence:!1,separator:!1,lspace:"thickmathspace",rspace:"thickmathspace",stretchy:!1,symmetric:!1,maxsize:"infinity",minsize:"0em",largeop:!1,movablelimits:!1,accent:!1,linebreak:"auto",lineleading:"1ex",linebreakstyle:"before",indentalign:"auto",indentshift:"0",indenttarget:"",indentalignfirst:"indentalign",indentshiftfirst:"indentshift",indentalignlast:"indentalign",indentshiftlast:"indentshift"}),c.MMLSPACING=d.MMLSPACING,c.OPTABLE=d.OPTABLE,c.pseudoScripts=new RegExp(["^[\"'*`","ª","°","²-´","¹","º","‘-‟","′-‷⁗","⁰ⁱ","⁴-ⁿ","₀-₎","]+$"].join("")),c.primes=new RegExp(["^[\"'`","‘-‟","]+$"].join("")),c.remapPrimes={34:8243,39:8242,96:8245,8216:8245,8217:8242,8218:8242,8219:8245,8220:8246,8221:8243,8222:8243,8223:8246},c.mathaccents=new RegExp(["^[","´́ˊ","`̀ˋ","¨̈","~̃˜","¯̄ˉ","˘̆","ˇ̌","^̂ˆ","→⃗","˙̇","˚̊","⃛","⃜","]$"].join("")),c);function c(){var t=null!==o&&o.apply(this,arguments)||this;return t._texClass=null,t.lspace=5/18,t.rspace=5/18,t}e.MmlMo=r},7238:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlInferredMrow=e.MmlMrow=void 0,r(9007)),r=(o=u.AbstractMmlNode,i(s,o),Object.defineProperty(s.prototype,"kind",{get:function(){return"mrow"},enumerable:!1,configurable:!0}),Object.defineProperty(s.prototype,"isSpacelike",{get:function(){var t,e;try{for(var r=c(this.childNodes),n=r.next();!n.done;n=r.next())if(!n.value.isSpacelike)return!1}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return!0},enumerable:!1,configurable:!0}),Object.defineProperty(s.prototype,"isEmbellished",{get:function(){var t,e,r=!1,n=0;try{for(var o=c(this.childNodes),i=o.next();!i.done;i=o.next()){var a=i.value;if(a)if(a.isEmbellished){if(r)return!1;r=!0,this._core=n}else if(!a.isSpacelike)return!1;n++}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},enumerable:!1,configurable:!0}),s.prototype.core=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core]:this},s.prototype.coreMO=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core].coreMO():this},s.prototype.nonSpaceLength=function(){var t,e,r=0;try{for(var n=c(this.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i&&!i.isSpacelike&&r++}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},s.prototype.firstNonSpace=function(){var t,e;try{for(var r=c(this.childNodes),n=r.next();!n.done;n=r.next()){var o=n.value;if(o&&!o.isSpacelike)return o}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return null},s.prototype.lastNonSpace=function(){for(var t=this.childNodes.length;0<=--t;){var e=this.childNodes[t];if(e&&!e.isSpacelike)return e}return null},s.prototype.setTeXclass=function(t){var e,r,n,o;if(null!=this.getProperty("open")||null!=this.getProperty("close")){this.getPrevClass(t),t=null;try{for(var i=c(this.childNodes),a=i.next();!a.done;a=i.next())t=a.value.setTeXclass(t)}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}null==this.texClass&&(this.texClass=u.TEXCLASS.INNER)}else{try{for(var s=c(this.childNodes),l=s.next();!l.done;l=s.next())t=l.value.setTeXclass(t)}catch(t){n={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.childNodes[0]&&this.updateTeXclass(this.childNodes[0])}return t},s.defaults=a({},u.AbstractMmlNode.defaults),s);function s(){var t=null!==o&&o.apply(this,arguments)||this;return t._core=null,t}e.MmlMrow=r;i(p,l=r),Object.defineProperty(p.prototype,"kind",{get:function(){return"inferredMrow"},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"isInferred",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"notParent",{get:function(){return!0},enumerable:!1,configurable:!0}),p.prototype.toString=function(){return"["+this.childNodes.join(",")+"]"},p.defaults=r.defaults;var l,i=p;function p(){return null!==l&&l.apply(this,arguments)||this}e.MmlInferredMrow=i},7265:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMtable=void 0,r(9007)),y=r(505),r=(c=u.AbstractMmlNode,o(a,c),Object.defineProperty(a.prototype,"kind",{get:function(){return"mtable"},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),a.prototype.setInheritedAttributes=function(t,e,r,n){var o,i;try{for(var a=m(u.indentAttributes),s=a.next();!s.done;s=a.next()){var l=s.value;t[l]&&this.attributes.setInherited(l,t[l][1]),void 0!==this.attributes.getExplicit(l)&&delete this.attributes.getAllAttributes()[l]}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}c.prototype.setInheritedAttributes.call(this,t,e,r,n)},a.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i,a,s;try{for(var l=m(this.childNodes),c=l.next();!c.done;c=l.next())(f=c.value).isKind("mtr")||this.replaceChild(this.factory.create("mtr"),f).appendChild(f)}catch(t){o={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}r=this.getProperty("scriptlevel")||r,e=!(!this.attributes.getExplicit("displaystyle")&&!this.attributes.getDefault("displaystyle")),t=this.addInheritedAttributes(t,{columnalign:this.attributes.get("columnalign"),rowalign:"center"});var u=this.attributes.getExplicit("data-cramped"),p=(0,y.split)(this.attributes.get("rowalign"));try{for(var h=m(this.childNodes),d=h.next();!d.done;d=h.next()){var f=d.value;t.rowalign[1]=p.shift()||t.rowalign[1],f.setInheritedAttributes(t,e,r,!!u)}}catch(t){a={error:t}}finally{try{d&&!d.done&&(s=h.return)&&s.call(h)}finally{if(a)throw a.error}}},a.prototype.verifyChildren=function(t){for(var e=null,r=this.factory,n=0;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMlabeledtr=e.MmlMtr=void 0,r(9007)),l=r(91),m=r(505),r=(a=s.AbstractMmlNode,o(c,a),Object.defineProperty(c.prototype,"kind",{get:function(){return"mtr"},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),c.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i,a,s;try{for(var l=f(this.childNodes),c=l.next();!c.done;c=l.next())(d=c.value).isKind("mtd")||this.replaceChild(this.factory.create("mtd"),d).appendChild(d)}catch(t){o={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}var u=(0,m.split)(this.attributes.get("columnalign"));1===this.arity&&u.unshift(this.parent.attributes.get("side")),t=this.addInheritedAttributes(t,{rowalign:this.attributes.get("rowalign"),columnalign:"center"});try{for(var p=f(this.childNodes),h=p.next();!h.done;h=p.next()){var d=h.value;t.columnalign[1]=u.shift()||t.columnalign[1],d.setInheritedAttributes(t,e,r,n)}}catch(t){a={error:t}}finally{try{h&&!h.done&&(s=p.return)&&s.call(p)}finally{if(a)throw a.error}}},c.prototype.verifyChildren=function(t){var e,r;if(!this.parent||this.parent.isKind("mtable")){try{for(var n=f(this.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i.isKind("mtd")||(this.replaceChild(this.factory.create("mtd"),i).appendChild(i),t.fixMtables||i.mError("Children of "+this.kind+" must be mtd",t))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}a.prototype.verifyChildren.call(this,t)}else this.mError(this.kind+" can only be a child of an mtable",t,!0)},c.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=f(this.childNodes),o=n.next();!o.done;o=n.next())o.value.setTeXclass(null)}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},c.defaults=i(i({},s.AbstractMmlNode.defaults),{rowalign:l.INHERIT,columnalign:l.INHERIT,groupalign:l.INHERIT}),c);function c(){return null!==a&&a.apply(this,arguments)||this}e.MmlMtr=r;o(p,u=r),Object.defineProperty(p.prototype,"kind",{get:function(){return"mlabeledtr"},enumerable:!1,configurable:!0}),Object.defineProperty(p.prototype,"arity",{get:function(){return 1},enumerable:!1,configurable:!0});var u,s=p;function p(){return null!==u&&u.apply(this,arguments)||this}e.MmlMlabeledtr=s},5184:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=(Object.defineProperty(s,"__esModule",{value:!0}),s.OPTABLE=s.MMLSPACING=s.getRange=s.RANGES=s.MO=s.OPDEF=void 0,e(9007));function r(t,e,r,n){return[t,e,r=void 0===r?o.TEXCLASS.BIN:r,n=void 0===n?null:n]}s.OPDEF=r,s.MO={ORD:r(0,0,o.TEXCLASS.ORD),ORD11:r(1,1,o.TEXCLASS.ORD),ORD21:r(2,1,o.TEXCLASS.ORD),ORD02:r(0,2,o.TEXCLASS.ORD),ORD55:r(5,5,o.TEXCLASS.ORD),NONE:r(0,0,o.TEXCLASS.NONE),OP:r(1,2,o.TEXCLASS.OP,{largeop:!0,movablelimits:!0,symmetric:!0}),OPFIXED:r(1,2,o.TEXCLASS.OP,{largeop:!0,movablelimits:!0}),INTEGRAL:r(0,1,o.TEXCLASS.OP,{largeop:!0,symmetric:!0}),INTEGRAL2:r(1,2,o.TEXCLASS.OP,{largeop:!0,symmetric:!0}),BIN3:r(3,3,o.TEXCLASS.BIN),BIN4:r(4,4,o.TEXCLASS.BIN),BIN01:r(0,1,o.TEXCLASS.BIN),BIN5:r(5,5,o.TEXCLASS.BIN),TALLBIN:r(4,4,o.TEXCLASS.BIN,{stretchy:!0}),BINOP:r(4,4,o.TEXCLASS.BIN,{largeop:!0,movablelimits:!0}),REL:r(5,5,o.TEXCLASS.REL),REL1:r(1,1,o.TEXCLASS.REL,{stretchy:!0}),REL4:r(4,4,o.TEXCLASS.REL),RELSTRETCH:r(5,5,o.TEXCLASS.REL,{stretchy:!0}),RELACCENT:r(5,5,o.TEXCLASS.REL,{accent:!0}),WIDEREL:r(5,5,o.TEXCLASS.REL,{accent:!0,stretchy:!0}),OPEN:r(0,0,o.TEXCLASS.OPEN,{fence:!0,stretchy:!0,symmetric:!0}),CLOSE:r(0,0,o.TEXCLASS.CLOSE,{fence:!0,stretchy:!0,symmetric:!0}),INNER:r(0,0,o.TEXCLASS.INNER),PUNCT:r(0,3,o.TEXCLASS.PUNCT),ACCENT:r(0,0,o.TEXCLASS.ORD,{accent:!0}),WIDEACCENT:r(0,0,o.TEXCLASS.ORD,{accent:!0,stretchy:!0})},s.RANGES=[[32,127,o.TEXCLASS.REL,"mo"],[160,191,o.TEXCLASS.ORD,"mo"],[192,591,o.TEXCLASS.ORD,"mi"],[688,879,o.TEXCLASS.ORD,"mo"],[880,6688,o.TEXCLASS.ORD,"mi"],[6832,6911,o.TEXCLASS.ORD,"mo"],[6912,7615,o.TEXCLASS.ORD,"mi"],[7616,7679,o.TEXCLASS.ORD,"mo"],[7680,8191,o.TEXCLASS.ORD,"mi"],[8192,8303,o.TEXCLASS.ORD,"mo"],[8304,8351,o.TEXCLASS.ORD,"mo"],[8448,8527,o.TEXCLASS.ORD,"mi"],[8528,8591,o.TEXCLASS.ORD,"mn"],[8592,8703,o.TEXCLASS.REL,"mo"],[8704,8959,o.TEXCLASS.BIN,"mo"],[8960,9215,o.TEXCLASS.ORD,"mo"],[9312,9471,o.TEXCLASS.ORD,"mn"],[9472,10223,o.TEXCLASS.ORD,"mo"],[10224,10239,o.TEXCLASS.REL,"mo"],[10240,10495,o.TEXCLASS.ORD,"mtext"],[10496,10623,o.TEXCLASS.REL,"mo"],[10624,10751,o.TEXCLASS.ORD,"mo"],[10752,11007,o.TEXCLASS.BIN,"mo"],[11008,11055,o.TEXCLASS.ORD,"mo"],[11056,11087,o.TEXCLASS.REL,"mo"],[11088,11263,o.TEXCLASS.ORD,"mo"],[11264,11744,o.TEXCLASS.ORD,"mi"],[11776,11903,o.TEXCLASS.ORD,"mo"],[11904,12255,o.TEXCLASS.ORD,"mi","normal"],[12272,12351,o.TEXCLASS.ORD,"mo"],[12352,42143,o.TEXCLASS.ORD,"mi","normal"],[42192,43055,o.TEXCLASS.ORD,"mi"],[43056,43071,o.TEXCLASS.ORD,"mn"],[43072,55295,o.TEXCLASS.ORD,"mi"],[63744,64255,o.TEXCLASS.ORD,"mi","normal"],[64256,65023,o.TEXCLASS.ORD,"mi"],[65024,65135,o.TEXCLASS.ORD,"mo"],[65136,65791,o.TEXCLASS.ORD,"mi"],[65792,65935,o.TEXCLASS.ORD,"mn"],[65936,74751,o.TEXCLASS.ORD,"mi","normal"],[74752,74879,o.TEXCLASS.ORD,"mn"],[74880,113823,o.TEXCLASS.ORD,"mi","normal"],[113824,119391,o.TEXCLASS.ORD,"mo"],[119648,119679,o.TEXCLASS.ORD,"mn"],[119808,120781,o.TEXCLASS.ORD,"mi"],[120782,120831,o.TEXCLASS.ORD,"mn"],[122624,129023,o.TEXCLASS.ORD,"mo"],[129024,129279,o.TEXCLASS.REL,"mo"],[129280,129535,o.TEXCLASS.ORD,"mo"],[131072,195103,o.TEXCLASS.ORD,"mi","normnal"]],s.getRange=function(t){var e,r,n=t.codePointAt(0);try{for(var o=l(s.RANGES),i=o.next();!i.done;i=o.next()){var a=i.value;if(n<=a[1]){if(n>=a[0])return a;break}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},s.MMLSPACING=[[0,0],[1,2],[3,3],[4,4],[0,0],[0,0],[0,3]],s.OPTABLE={prefix:{"(":s.MO.OPEN,"+":s.MO.BIN01,"-":s.MO.BIN01,"[":s.MO.OPEN,"{":s.MO.OPEN,"|":s.MO.OPEN,"||":[0,0,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"¬":s.MO.ORD21,"±":s.MO.BIN01,"‖":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"‘":[0,0,o.TEXCLASS.OPEN,{fence:!0}],"“":[0,0,o.TEXCLASS.OPEN,{fence:!0}],"ⅅ":s.MO.ORD21,"ⅆ":r(2,0,o.TEXCLASS.ORD),"∀":s.MO.ORD21,"∂":s.MO.ORD21,"∃":s.MO.ORD21,"∄":s.MO.ORD21,"∇":s.MO.ORD21,"∏":s.MO.OP,"∐":s.MO.OP,"∑":s.MO.OP,"−":s.MO.BIN01,"∓":s.MO.BIN01,"√":[1,1,o.TEXCLASS.ORD,{stretchy:!0}],"∛":s.MO.ORD11,"∜":s.MO.ORD11,"∠":s.MO.ORD,"∡":s.MO.ORD,"∢":s.MO.ORD,"∫":s.MO.INTEGRAL,"∬":s.MO.INTEGRAL,"∭":s.MO.INTEGRAL,"∮":s.MO.INTEGRAL,"∯":s.MO.INTEGRAL,"∰":s.MO.INTEGRAL,"∱":s.MO.INTEGRAL,"∲":s.MO.INTEGRAL,"∳":s.MO.INTEGRAL,"⋀":s.MO.OP,"⋁":s.MO.OP,"⋂":s.MO.OP,"⋃":s.MO.OP,"⌈":s.MO.OPEN,"⌊":s.MO.OPEN,"〈":s.MO.OPEN,"❲":s.MO.OPEN,"⟦":s.MO.OPEN,"⟨":s.MO.OPEN,"⟪":s.MO.OPEN,"⟬":s.MO.OPEN,"⟮":s.MO.OPEN,"⦀":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"⦃":s.MO.OPEN,"⦅":s.MO.OPEN,"⦇":s.MO.OPEN,"⦉":s.MO.OPEN,"⦋":s.MO.OPEN,"⦍":s.MO.OPEN,"⦏":s.MO.OPEN,"⦑":s.MO.OPEN,"⦓":s.MO.OPEN,"⦕":s.MO.OPEN,"⦗":s.MO.OPEN,"⧼":s.MO.OPEN,"⨀":s.MO.OP,"⨁":s.MO.OP,"⨂":s.MO.OP,"⨃":s.MO.OP,"⨄":s.MO.OP,"⨅":s.MO.OP,"⨆":s.MO.OP,"⨇":s.MO.OP,"⨈":s.MO.OP,"⨉":s.MO.OP,"⨊":s.MO.OP,"⨋":s.MO.INTEGRAL2,"⨌":s.MO.INTEGRAL,"⨍":s.MO.INTEGRAL2,"⨎":s.MO.INTEGRAL2,"⨏":s.MO.INTEGRAL2,"⨐":s.MO.OP,"⨑":s.MO.OP,"⨒":s.MO.OP,"⨓":s.MO.OP,"⨔":s.MO.OP,"⨕":s.MO.INTEGRAL2,"⨖":s.MO.INTEGRAL2,"⨗":s.MO.INTEGRAL2,"⨘":s.MO.INTEGRAL2,"⨙":s.MO.INTEGRAL2,"⨚":s.MO.INTEGRAL2,"⨛":s.MO.INTEGRAL2,"⨜":s.MO.INTEGRAL2,"⫼":s.MO.OP,"⫿":s.MO.OP},postfix:{"!!":r(1,0),"!":[1,0,o.TEXCLASS.CLOSE,null],'"':s.MO.ACCENT,"&":s.MO.ORD,")":s.MO.CLOSE,"++":r(0,0),"--":r(0,0),"..":r(0,0),"...":s.MO.ORD,"'":s.MO.ACCENT,"]":s.MO.CLOSE,"^":s.MO.WIDEACCENT,_:s.MO.WIDEACCENT,"`":s.MO.ACCENT,"|":s.MO.CLOSE,"}":s.MO.CLOSE,"~":s.MO.WIDEACCENT,"||":[0,0,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"¨":s.MO.ACCENT,"ª":s.MO.ACCENT,"¯":s.MO.WIDEACCENT,"°":s.MO.ORD,"²":s.MO.ACCENT,"³":s.MO.ACCENT,"´":s.MO.ACCENT,"¸":s.MO.ACCENT,"¹":s.MO.ACCENT,"º":s.MO.ACCENT,"ˆ":s.MO.WIDEACCENT,"ˇ":s.MO.WIDEACCENT,"ˉ":s.MO.WIDEACCENT,"ˊ":s.MO.ACCENT,"ˋ":s.MO.ACCENT,"ˍ":s.MO.WIDEACCENT,"˘":s.MO.ACCENT,"˙":s.MO.ACCENT,"˚":s.MO.ACCENT,"˜":s.MO.WIDEACCENT,"˝":s.MO.ACCENT,"˷":s.MO.WIDEACCENT,"̂":s.MO.WIDEACCENT,"̑":s.MO.ACCENT,"϶":s.MO.REL,"‖":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"’":[0,0,o.TEXCLASS.CLOSE,{fence:!0}],"‚":s.MO.ACCENT,"‛":s.MO.ACCENT,"”":[0,0,o.TEXCLASS.CLOSE,{fence:!0}],"„":s.MO.ACCENT,"‟":s.MO.ACCENT,"′":s.MO.ORD,"″":s.MO.ACCENT,"‴":s.MO.ACCENT,"‵":s.MO.ACCENT,"‶":s.MO.ACCENT,"‷":s.MO.ACCENT,"‾":s.MO.WIDEACCENT,"⁗":s.MO.ACCENT,"⃛":s.MO.ACCENT,"⃜":s.MO.ACCENT,"⌉":s.MO.CLOSE,"⌋":s.MO.CLOSE,"〉":s.MO.CLOSE,"⎴":s.MO.WIDEACCENT,"⎵":s.MO.WIDEACCENT,"⏜":s.MO.WIDEACCENT,"⏝":s.MO.WIDEACCENT,"⏞":s.MO.WIDEACCENT,"⏟":s.MO.WIDEACCENT,"⏠":s.MO.WIDEACCENT,"⏡":s.MO.WIDEACCENT,"■":s.MO.BIN3,"□":s.MO.BIN3,"▪":s.MO.BIN3,"▫":s.MO.BIN3,"▭":s.MO.BIN3,"▮":s.MO.BIN3,"▯":s.MO.BIN3,"▰":s.MO.BIN3,"▱":s.MO.BIN3,"▲":s.MO.BIN4,"▴":s.MO.BIN4,"▶":s.MO.BIN4,"▷":s.MO.BIN4,"▸":s.MO.BIN4,"▼":s.MO.BIN4,"▾":s.MO.BIN4,"◀":s.MO.BIN4,"◁":s.MO.BIN4,"◂":s.MO.BIN4,"◄":s.MO.BIN4,"◅":s.MO.BIN4,"◆":s.MO.BIN4,"◇":s.MO.BIN4,"◈":s.MO.BIN4,"◉":s.MO.BIN4,"◌":s.MO.BIN4,"◍":s.MO.BIN4,"◎":s.MO.BIN4,"●":s.MO.BIN4,"◖":s.MO.BIN4,"◗":s.MO.BIN4,"◦":s.MO.BIN4,"♭":s.MO.ORD02,"♮":s.MO.ORD02,"♯":s.MO.ORD02,"❳":s.MO.CLOSE,"⟧":s.MO.CLOSE,"⟩":s.MO.CLOSE,"⟫":s.MO.CLOSE,"⟭":s.MO.CLOSE,"⟯":s.MO.CLOSE,"⦀":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"⦄":s.MO.CLOSE,"⦆":s.MO.CLOSE,"⦈":s.MO.CLOSE,"⦊":s.MO.CLOSE,"⦌":s.MO.CLOSE,"⦎":s.MO.CLOSE,"⦐":s.MO.CLOSE,"⦒":s.MO.CLOSE,"⦔":s.MO.CLOSE,"⦖":s.MO.CLOSE,"⦘":s.MO.CLOSE,"⧽":s.MO.CLOSE},infix:{"!=":s.MO.BIN4,"#":s.MO.ORD,$:s.MO.ORD,"%":[3,3,o.TEXCLASS.ORD,null],"&&":s.MO.BIN4,"":s.MO.ORD,"*":s.MO.BIN3,"**":r(1,1),"*=":s.MO.BIN4,"+":s.MO.BIN4,"+=":s.MO.BIN4,",":[0,3,o.TEXCLASS.PUNCT,{linebreakstyle:"after",separator:!0}],"-":s.MO.BIN4,"-=":s.MO.BIN4,"->":s.MO.BIN5,".":[0,3,o.TEXCLASS.PUNCT,{separator:!0}],"/":s.MO.ORD11,"//":r(1,1),"/=":s.MO.BIN4,":":[1,2,o.TEXCLASS.REL,null],":=":s.MO.BIN4,";":[0,3,o.TEXCLASS.PUNCT,{linebreakstyle:"after",separator:!0}],"<":s.MO.REL,"<=":s.MO.BIN5,"<>":r(1,1),"=":s.MO.REL,"==":s.MO.BIN4,">":s.MO.REL,">=":s.MO.BIN5,"?":[1,1,o.TEXCLASS.CLOSE,null],"@":s.MO.ORD11,"\\":s.MO.ORD,"^":s.MO.ORD11,_:s.MO.ORD11,"|":[2,2,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"||":[2,2,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[2,2,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"±":s.MO.BIN4,"·":s.MO.BIN4,"×":s.MO.BIN4,"÷":s.MO.BIN4,"ʹ":s.MO.ORD,"̀":s.MO.ACCENT,"́":s.MO.ACCENT,"̃":s.MO.WIDEACCENT,"̄":s.MO.ACCENT,"̆":s.MO.ACCENT,"̇":s.MO.ACCENT,"̈":s.MO.ACCENT,"̌":s.MO.ACCENT,"̲":s.MO.WIDEACCENT,"̸":s.MO.REL4,"―":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"‗":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"†":s.MO.BIN3,"‡":s.MO.BIN3,"•":s.MO.BIN4,"…":s.MO.INNER,"⁃":s.MO.BIN4,"⁄":s.MO.TALLBIN,"":s.MO.NONE,"":s.MO.NONE,"":[0,0,o.TEXCLASS.NONE,{linebreakstyle:"after",separator:!0}],"":s.MO.NONE,"⃗":s.MO.ACCENT,"ℑ":s.MO.ORD,"ℓ":s.MO.ORD,"℘":s.MO.ORD,"ℜ":s.MO.ORD,"←":s.MO.WIDEREL,"↑":s.MO.RELSTRETCH,"→":s.MO.WIDEREL,"↓":s.MO.RELSTRETCH,"↔":s.MO.WIDEREL,"↕":s.MO.RELSTRETCH,"↖":s.MO.RELSTRETCH,"↗":s.MO.RELSTRETCH,"↘":s.MO.RELSTRETCH,"↙":s.MO.RELSTRETCH,"↚":s.MO.RELACCENT,"↛":s.MO.RELACCENT,"↜":s.MO.WIDEREL,"↝":s.MO.WIDEREL,"↞":s.MO.WIDEREL,"↟":s.MO.WIDEREL,"↠":s.MO.WIDEREL,"↡":s.MO.RELSTRETCH,"↢":s.MO.WIDEREL,"↣":s.MO.WIDEREL,"↤":s.MO.WIDEREL,"↥":s.MO.RELSTRETCH,"↦":s.MO.WIDEREL,"↧":s.MO.RELSTRETCH,"↨":s.MO.RELSTRETCH,"↩":s.MO.WIDEREL,"↪":s.MO.WIDEREL,"↫":s.MO.WIDEREL,"↬":s.MO.WIDEREL,"↭":s.MO.WIDEREL,"↮":s.MO.RELACCENT,"↯":s.MO.RELSTRETCH,"↰":s.MO.RELSTRETCH,"↱":s.MO.RELSTRETCH,"↲":s.MO.RELSTRETCH,"↳":s.MO.RELSTRETCH,"↴":s.MO.RELSTRETCH,"↵":s.MO.RELSTRETCH,"↶":s.MO.RELACCENT,"↷":s.MO.RELACCENT,"↸":s.MO.REL,"↹":s.MO.WIDEREL,"↺":s.MO.REL,"↻":s.MO.REL,"↼":s.MO.WIDEREL,"↽":s.MO.WIDEREL,"↾":s.MO.RELSTRETCH,"↿":s.MO.RELSTRETCH,"⇀":s.MO.WIDEREL,"⇁":s.MO.WIDEREL,"⇂":s.MO.RELSTRETCH,"⇃":s.MO.RELSTRETCH,"⇄":s.MO.WIDEREL,"⇅":s.MO.RELSTRETCH,"⇆":s.MO.WIDEREL,"⇇":s.MO.WIDEREL,"⇈":s.MO.RELSTRETCH,"⇉":s.MO.WIDEREL,"⇊":s.MO.RELSTRETCH,"⇋":s.MO.WIDEREL,"⇌":s.MO.WIDEREL,"⇍":s.MO.RELACCENT,"⇎":s.MO.RELACCENT,"⇏":s.MO.RELACCENT,"⇐":s.MO.WIDEREL,"⇑":s.MO.RELSTRETCH,"⇒":s.MO.WIDEREL,"⇓":s.MO.RELSTRETCH,"⇔":s.MO.WIDEREL,"⇕":s.MO.RELSTRETCH,"⇖":s.MO.RELSTRETCH,"⇗":s.MO.RELSTRETCH,"⇘":s.MO.RELSTRETCH,"⇙":s.MO.RELSTRETCH,"⇚":s.MO.WIDEREL,"⇛":s.MO.WIDEREL,"⇜":s.MO.WIDEREL,"⇝":s.MO.WIDEREL,"⇞":s.MO.REL,"⇟":s.MO.REL,"⇠":s.MO.WIDEREL,"⇡":s.MO.RELSTRETCH,"⇢":s.MO.WIDEREL,"⇣":s.MO.RELSTRETCH,"⇤":s.MO.WIDEREL,"⇥":s.MO.WIDEREL,"⇦":s.MO.WIDEREL,"⇧":s.MO.RELSTRETCH,"⇨":s.MO.WIDEREL,"⇩":s.MO.RELSTRETCH,"⇪":s.MO.RELSTRETCH,"⇫":s.MO.RELSTRETCH,"⇬":s.MO.RELSTRETCH,"⇭":s.MO.RELSTRETCH,"⇮":s.MO.RELSTRETCH,"⇯":s.MO.RELSTRETCH,"⇰":s.MO.WIDEREL,"⇱":s.MO.REL,"⇲":s.MO.REL,"⇳":s.MO.RELSTRETCH,"⇴":s.MO.RELACCENT,"⇵":s.MO.RELSTRETCH,"⇶":s.MO.WIDEREL,"⇷":s.MO.RELACCENT,"⇸":s.MO.RELACCENT,"⇹":s.MO.RELACCENT,"⇺":s.MO.RELACCENT,"⇻":s.MO.RELACCENT,"⇼":s.MO.RELACCENT,"⇽":s.MO.WIDEREL,"⇾":s.MO.WIDEREL,"⇿":s.MO.WIDEREL,"∁":r(1,2,o.TEXCLASS.ORD),"∅":s.MO.ORD,"∆":s.MO.BIN3,"∈":s.MO.REL,"∉":s.MO.REL,"∊":s.MO.REL,"∋":s.MO.REL,"∌":s.MO.REL,"∍":s.MO.REL,"∎":s.MO.BIN3,"−":s.MO.BIN4,"∓":s.MO.BIN4,"∔":s.MO.BIN4,"∕":s.MO.TALLBIN,"∖":s.MO.BIN4,"∗":s.MO.BIN4,"∘":s.MO.BIN4,"∙":s.MO.BIN4,"∝":s.MO.REL,"∞":s.MO.ORD,"∟":s.MO.REL,"∣":s.MO.REL,"∤":s.MO.REL,"∥":s.MO.REL,"∦":s.MO.REL,"∧":s.MO.BIN4,"∨":s.MO.BIN4,"∩":s.MO.BIN4,"∪":s.MO.BIN4,"∴":s.MO.REL,"∵":s.MO.REL,"∶":s.MO.REL,"∷":s.MO.REL,"∸":s.MO.BIN4,"∹":s.MO.REL,"∺":s.MO.BIN4,"∻":s.MO.REL,"∼":s.MO.REL,"∽":s.MO.REL,"∽̱":s.MO.BIN3,"∾":s.MO.REL,"∿":s.MO.BIN3,"≀":s.MO.BIN4,"≁":s.MO.REL,"≂":s.MO.REL,"≂̸":s.MO.REL,"≃":s.MO.REL,"≄":s.MO.REL,"≅":s.MO.REL,"≆":s.MO.REL,"≇":s.MO.REL,"≈":s.MO.REL,"≉":s.MO.REL,"≊":s.MO.REL,"≋":s.MO.REL,"≌":s.MO.REL,"≍":s.MO.REL,"≎":s.MO.REL,"≎̸":s.MO.REL,"≏":s.MO.REL,"≏̸":s.MO.REL,"≐":s.MO.REL,"≑":s.MO.REL,"≒":s.MO.REL,"≓":s.MO.REL,"≔":s.MO.REL,"≕":s.MO.REL,"≖":s.MO.REL,"≗":s.MO.REL,"≘":s.MO.REL,"≙":s.MO.REL,"≚":s.MO.REL,"≛":s.MO.REL,"≜":s.MO.REL,"≝":s.MO.REL,"≞":s.MO.REL,"≟":s.MO.REL,"≠":s.MO.REL,"≡":s.MO.REL,"≢":s.MO.REL,"≣":s.MO.REL,"≤":s.MO.REL,"≥":s.MO.REL,"≦":s.MO.REL,"≦̸":s.MO.REL,"≧":s.MO.REL,"≨":s.MO.REL,"≩":s.MO.REL,"≪":s.MO.REL,"≪̸":s.MO.REL,"≫":s.MO.REL,"≫̸":s.MO.REL,"≬":s.MO.REL,"≭":s.MO.REL,"≮":s.MO.REL,"≯":s.MO.REL,"≰":s.MO.REL,"≱":s.MO.REL,"≲":s.MO.REL,"≳":s.MO.REL,"≴":s.MO.REL,"≵":s.MO.REL,"≶":s.MO.REL,"≷":s.MO.REL,"≸":s.MO.REL,"≹":s.MO.REL,"≺":s.MO.REL,"≻":s.MO.REL,"≼":s.MO.REL,"≽":s.MO.REL,"≾":s.MO.REL,"≿":s.MO.REL,"≿̸":s.MO.REL,"⊀":s.MO.REL,"⊁":s.MO.REL,"⊂":s.MO.REL,"⊂⃒":s.MO.REL,"⊃":s.MO.REL,"⊃⃒":s.MO.REL,"⊄":s.MO.REL,"⊅":s.MO.REL,"⊆":s.MO.REL,"⊇":s.MO.REL,"⊈":s.MO.REL,"⊉":s.MO.REL,"⊊":s.MO.REL,"⊋":s.MO.REL,"⊌":s.MO.BIN4,"⊍":s.MO.BIN4,"⊎":s.MO.BIN4,"⊏":s.MO.REL,"⊏̸":s.MO.REL,"⊐":s.MO.REL,"⊐̸":s.MO.REL,"⊑":s.MO.REL,"⊒":s.MO.REL,"⊓":s.MO.BIN4,"⊔":s.MO.BIN4,"⊕":s.MO.BIN4,"⊖":s.MO.BIN4,"⊗":s.MO.BIN4,"⊘":s.MO.BIN4,"⊙":s.MO.BIN4,"⊚":s.MO.BIN4,"⊛":s.MO.BIN4,"⊜":s.MO.BIN4,"⊝":s.MO.BIN4,"⊞":s.MO.BIN4,"⊟":s.MO.BIN4,"⊠":s.MO.BIN4,"⊡":s.MO.BIN4,"⊢":s.MO.REL,"⊣":s.MO.REL,"⊤":s.MO.ORD55,"⊥":s.MO.REL,"⊦":s.MO.REL,"⊧":s.MO.REL,"⊨":s.MO.REL,"⊩":s.MO.REL,"⊪":s.MO.REL,"⊫":s.MO.REL,"⊬":s.MO.REL,"⊭":s.MO.REL,"⊮":s.MO.REL,"⊯":s.MO.REL,"⊰":s.MO.REL,"⊱":s.MO.REL,"⊲":s.MO.REL,"⊳":s.MO.REL,"⊴":s.MO.REL,"⊵":s.MO.REL,"⊶":s.MO.REL,"⊷":s.MO.REL,"⊸":s.MO.REL,"⊹":s.MO.REL,"⊺":s.MO.BIN4,"⊻":s.MO.BIN4,"⊼":s.MO.BIN4,"⊽":s.MO.BIN4,"⊾":s.MO.BIN3,"⊿":s.MO.BIN3,"⋄":s.MO.BIN4,"⋅":s.MO.BIN4,"⋆":s.MO.BIN4,"⋇":s.MO.BIN4,"⋈":s.MO.REL,"⋉":s.MO.BIN4,"⋊":s.MO.BIN4,"⋋":s.MO.BIN4,"⋌":s.MO.BIN4,"⋍":s.MO.REL,"⋎":s.MO.BIN4,"⋏":s.MO.BIN4,"⋐":s.MO.REL,"⋑":s.MO.REL,"⋒":s.MO.BIN4,"⋓":s.MO.BIN4,"⋔":s.MO.REL,"⋕":s.MO.REL,"⋖":s.MO.REL,"⋗":s.MO.REL,"⋘":s.MO.REL,"⋙":s.MO.REL,"⋚":s.MO.REL,"⋛":s.MO.REL,"⋜":s.MO.REL,"⋝":s.MO.REL,"⋞":s.MO.REL,"⋟":s.MO.REL,"⋠":s.MO.REL,"⋡":s.MO.REL,"⋢":s.MO.REL,"⋣":s.MO.REL,"⋤":s.MO.REL,"⋥":s.MO.REL,"⋦":s.MO.REL,"⋧":s.MO.REL,"⋨":s.MO.REL,"⋩":s.MO.REL,"⋪":s.MO.REL,"⋫":s.MO.REL,"⋬":s.MO.REL,"⋭":s.MO.REL,"⋮":s.MO.ORD55,"⋯":s.MO.INNER,"⋰":s.MO.REL,"⋱":[5,5,o.TEXCLASS.INNER,null],"⋲":s.MO.REL,"⋳":s.MO.REL,"⋴":s.MO.REL,"⋵":s.MO.REL,"⋶":s.MO.REL,"⋷":s.MO.REL,"⋸":s.MO.REL,"⋹":s.MO.REL,"⋺":s.MO.REL,"⋻":s.MO.REL,"⋼":s.MO.REL,"⋽":s.MO.REL,"⋾":s.MO.REL,"⋿":s.MO.REL,"⌅":s.MO.BIN3,"⌆":s.MO.BIN3,"⌢":s.MO.REL4,"⌣":s.MO.REL4,"〈":s.MO.OPEN,"〉":s.MO.CLOSE,"⎪":s.MO.ORD,"⎯":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"⎰":s.MO.OPEN,"⎱":s.MO.CLOSE,"─":s.MO.ORD,"△":s.MO.BIN4,"▵":s.MO.BIN4,"▹":s.MO.BIN4,"▽":s.MO.BIN4,"▿":s.MO.BIN4,"◃":s.MO.BIN4,"◯":s.MO.BIN3,"♠":s.MO.ORD,"♡":s.MO.ORD,"♢":s.MO.ORD,"♣":s.MO.ORD,"❘":s.MO.REL,"⟰":s.MO.RELSTRETCH,"⟱":s.MO.RELSTRETCH,"⟵":s.MO.WIDEREL,"⟶":s.MO.WIDEREL,"⟷":s.MO.WIDEREL,"⟸":s.MO.WIDEREL,"⟹":s.MO.WIDEREL,"⟺":s.MO.WIDEREL,"⟻":s.MO.WIDEREL,"⟼":s.MO.WIDEREL,"⟽":s.MO.WIDEREL,"⟾":s.MO.WIDEREL,"⟿":s.MO.WIDEREL,"⤀":s.MO.RELACCENT,"⤁":s.MO.RELACCENT,"⤂":s.MO.RELACCENT,"⤃":s.MO.RELACCENT,"⤄":s.MO.RELACCENT,"⤅":s.MO.RELACCENT,"⤆":s.MO.RELACCENT,"⤇":s.MO.RELACCENT,"⤈":s.MO.REL,"⤉":s.MO.REL,"⤊":s.MO.RELSTRETCH,"⤋":s.MO.RELSTRETCH,"⤌":s.MO.WIDEREL,"⤍":s.MO.WIDEREL,"⤎":s.MO.WIDEREL,"⤏":s.MO.WIDEREL,"⤐":s.MO.WIDEREL,"⤑":s.MO.RELACCENT,"⤒":s.MO.RELSTRETCH,"⤓":s.MO.RELSTRETCH,"⤔":s.MO.RELACCENT,"⤕":s.MO.RELACCENT,"⤖":s.MO.RELACCENT,"⤗":s.MO.RELACCENT,"⤘":s.MO.RELACCENT,"⤙":s.MO.RELACCENT,"⤚":s.MO.RELACCENT,"⤛":s.MO.RELACCENT,"⤜":s.MO.RELACCENT,"⤝":s.MO.RELACCENT,"⤞":s.MO.RELACCENT,"⤟":s.MO.RELACCENT,"⤠":s.MO.RELACCENT,"⤡":s.MO.RELSTRETCH,"⤢":s.MO.RELSTRETCH,"⤣":s.MO.REL,"⤤":s.MO.REL,"⤥":s.MO.REL,"⤦":s.MO.REL,"⤧":s.MO.REL,"⤨":s.MO.REL,"⤩":s.MO.REL,"⤪":s.MO.REL,"⤫":s.MO.REL,"⤬":s.MO.REL,"⤭":s.MO.REL,"⤮":s.MO.REL,"⤯":s.MO.REL,"⤰":s.MO.REL,"⤱":s.MO.REL,"⤲":s.MO.REL,"⤳":s.MO.RELACCENT,"⤴":s.MO.REL,"⤵":s.MO.REL,"⤶":s.MO.REL,"⤷":s.MO.REL,"⤸":s.MO.REL,"⤹":s.MO.REL,"⤺":s.MO.RELACCENT,"⤻":s.MO.RELACCENT,"⤼":s.MO.RELACCENT,"⤽":s.MO.RELACCENT,"⤾":s.MO.REL,"⤿":s.MO.REL,"⥀":s.MO.REL,"⥁":s.MO.REL,"⥂":s.MO.RELACCENT,"⥃":s.MO.RELACCENT,"⥄":s.MO.RELACCENT,"⥅":s.MO.RELACCENT,"⥆":s.MO.RELACCENT,"⥇":s.MO.RELACCENT,"⥈":s.MO.RELACCENT,"⥉":s.MO.REL,"⥊":s.MO.RELACCENT,"⥋":s.MO.RELACCENT,"⥌":s.MO.REL,"⥍":s.MO.REL,"⥎":s.MO.WIDEREL,"⥏":s.MO.RELSTRETCH,"⥐":s.MO.WIDEREL,"⥑":s.MO.RELSTRETCH,"⥒":s.MO.WIDEREL,"⥓":s.MO.WIDEREL,"⥔":s.MO.RELSTRETCH,"⥕":s.MO.RELSTRETCH,"⥖":s.MO.RELSTRETCH,"⥗":s.MO.RELSTRETCH,"⥘":s.MO.RELSTRETCH,"⥙":s.MO.RELSTRETCH,"⥚":s.MO.WIDEREL,"⥛":s.MO.WIDEREL,"⥜":s.MO.RELSTRETCH,"⥝":s.MO.RELSTRETCH,"⥞":s.MO.WIDEREL,"⥟":s.MO.WIDEREL,"⥠":s.MO.RELSTRETCH,"⥡":s.MO.RELSTRETCH,"⥢":s.MO.RELACCENT,"⥣":s.MO.REL,"⥤":s.MO.RELACCENT,"⥥":s.MO.REL,"⥦":s.MO.RELACCENT,"⥧":s.MO.RELACCENT,"⥨":s.MO.RELACCENT,"⥩":s.MO.RELACCENT,"⥪":s.MO.RELACCENT,"⥫":s.MO.RELACCENT,"⥬":s.MO.RELACCENT,"⥭":s.MO.RELACCENT,"⥮":s.MO.RELSTRETCH,"⥯":s.MO.RELSTRETCH,"⥰":s.MO.RELACCENT,"⥱":s.MO.RELACCENT,"⥲":s.MO.RELACCENT,"⥳":s.MO.RELACCENT,"⥴":s.MO.RELACCENT,"⥵":s.MO.RELACCENT,"⥶":s.MO.RELACCENT,"⥷":s.MO.RELACCENT,"⥸":s.MO.RELACCENT,"⥹":s.MO.RELACCENT,"⥺":s.MO.RELACCENT,"⥻":s.MO.RELACCENT,"⥼":s.MO.RELACCENT,"⥽":s.MO.RELACCENT,"⥾":s.MO.REL,"⥿":s.MO.REL,"⦁":s.MO.BIN3,"⦂":s.MO.BIN3,"⦙":s.MO.BIN3,"⦚":s.MO.BIN3,"⦛":s.MO.BIN3,"⦜":s.MO.BIN3,"⦝":s.MO.BIN3,"⦞":s.MO.BIN3,"⦟":s.MO.BIN3,"⦠":s.MO.BIN3,"⦡":s.MO.BIN3,"⦢":s.MO.BIN3,"⦣":s.MO.BIN3,"⦤":s.MO.BIN3,"⦥":s.MO.BIN3,"⦦":s.MO.BIN3,"⦧":s.MO.BIN3,"⦨":s.MO.BIN3,"⦩":s.MO.BIN3,"⦪":s.MO.BIN3,"⦫":s.MO.BIN3,"⦬":s.MO.BIN3,"⦭":s.MO.BIN3,"⦮":s.MO.BIN3,"⦯":s.MO.BIN3,"⦰":s.MO.BIN3,"⦱":s.MO.BIN3,"⦲":s.MO.BIN3,"⦳":s.MO.BIN3,"⦴":s.MO.BIN3,"⦵":s.MO.BIN3,"⦶":s.MO.BIN4,"⦷":s.MO.BIN4,"⦸":s.MO.BIN4,"⦹":s.MO.BIN4,"⦺":s.MO.BIN4,"⦻":s.MO.BIN4,"⦼":s.MO.BIN4,"⦽":s.MO.BIN4,"⦾":s.MO.BIN4,"⦿":s.MO.BIN4,"⧀":s.MO.REL,"⧁":s.MO.REL,"⧂":s.MO.BIN3,"⧃":s.MO.BIN3,"⧄":s.MO.BIN4,"⧅":s.MO.BIN4,"⧆":s.MO.BIN4,"⧇":s.MO.BIN4,"⧈":s.MO.BIN4,"⧉":s.MO.BIN3,"⧊":s.MO.BIN3,"⧋":s.MO.BIN3,"⧌":s.MO.BIN3,"⧍":s.MO.BIN3,"⧎":s.MO.REL,"⧏":s.MO.REL,"⧏̸":s.MO.REL,"⧐":s.MO.REL,"⧐̸":s.MO.REL,"⧑":s.MO.REL,"⧒":s.MO.REL,"⧓":s.MO.REL,"⧔":s.MO.REL,"⧕":s.MO.REL,"⧖":s.MO.BIN4,"⧗":s.MO.BIN4,"⧘":s.MO.BIN3,"⧙":s.MO.BIN3,"⧛":s.MO.BIN3,"⧜":s.MO.BIN3,"⧝":s.MO.BIN3,"⧞":s.MO.REL,"⧟":s.MO.BIN3,"⧠":s.MO.BIN3,"⧡":s.MO.REL,"⧢":s.MO.BIN4,"⧣":s.MO.REL,"⧤":s.MO.REL,"⧥":s.MO.REL,"⧦":s.MO.REL,"⧧":s.MO.BIN3,"⧨":s.MO.BIN3,"⧩":s.MO.BIN3,"⧪":s.MO.BIN3,"⧫":s.MO.BIN3,"⧬":s.MO.BIN3,"⧭":s.MO.BIN3,"⧮":s.MO.BIN3,"⧯":s.MO.BIN3,"⧰":s.MO.BIN3,"⧱":s.MO.BIN3,"⧲":s.MO.BIN3,"⧳":s.MO.BIN3,"⧴":s.MO.REL,"⧵":s.MO.BIN4,"⧶":s.MO.BIN4,"⧷":s.MO.BIN4,"⧸":s.MO.BIN3,"⧹":s.MO.BIN3,"⧺":s.MO.BIN3,"⧻":s.MO.BIN3,"⧾":s.MO.BIN4,"⧿":s.MO.BIN4,"⨝":s.MO.BIN3,"⨞":s.MO.BIN3,"⨟":s.MO.BIN3,"⨠":s.MO.BIN3,"⨡":s.MO.BIN3,"⨢":s.MO.BIN4,"⨣":s.MO.BIN4,"⨤":s.MO.BIN4,"⨥":s.MO.BIN4,"⨦":s.MO.BIN4,"⨧":s.MO.BIN4,"⨨":s.MO.BIN4,"⨩":s.MO.BIN4,"⨪":s.MO.BIN4,"⨫":s.MO.BIN4,"⨬":s.MO.BIN4,"⨭":s.MO.BIN4,"⨮":s.MO.BIN4,"⨯":s.MO.BIN4,"⨰":s.MO.BIN4,"⨱":s.MO.BIN4,"⨲":s.MO.BIN4,"⨳":s.MO.BIN4,"⨴":s.MO.BIN4,"⨵":s.MO.BIN4,"⨶":s.MO.BIN4,"⨷":s.MO.BIN4,"⨸":s.MO.BIN4,"⨹":s.MO.BIN4,"⨺":s.MO.BIN4,"⨻":s.MO.BIN4,"⨼":s.MO.BIN4,"⨽":s.MO.BIN4,"⨾":s.MO.BIN4,"⨿":s.MO.BIN4,"⩀":s.MO.BIN4,"⩁":s.MO.BIN4,"⩂":s.MO.BIN4,"⩃":s.MO.BIN4,"⩄":s.MO.BIN4,"⩅":s.MO.BIN4,"⩆":s.MO.BIN4,"⩇":s.MO.BIN4,"⩈":s.MO.BIN4,"⩉":s.MO.BIN4,"⩊":s.MO.BIN4,"⩋":s.MO.BIN4,"⩌":s.MO.BIN4,"⩍":s.MO.BIN4,"⩎":s.MO.BIN4,"⩏":s.MO.BIN4,"⩐":s.MO.BIN4,"⩑":s.MO.BIN4,"⩒":s.MO.BIN4,"⩓":s.MO.BIN4,"⩔":s.MO.BIN4,"⩕":s.MO.BIN4,"⩖":s.MO.BIN4,"⩗":s.MO.BIN4,"⩘":s.MO.BIN4,"⩙":s.MO.REL,"⩚":s.MO.BIN4,"⩛":s.MO.BIN4,"⩜":s.MO.BIN4,"⩝":s.MO.BIN4,"⩞":s.MO.BIN4,"⩟":s.MO.BIN4,"⩠":s.MO.BIN4,"⩡":s.MO.BIN4,"⩢":s.MO.BIN4,"⩣":s.MO.BIN4,"⩤":s.MO.BIN4,"⩥":s.MO.BIN4,"⩦":s.MO.REL,"⩧":s.MO.REL,"⩨":s.MO.REL,"⩩":s.MO.REL,"⩪":s.MO.REL,"⩫":s.MO.REL,"⩬":s.MO.REL,"⩭":s.MO.REL,"⩮":s.MO.REL,"⩯":s.MO.REL,"⩰":s.MO.REL,"⩱":s.MO.BIN4,"⩲":s.MO.BIN4,"⩳":s.MO.REL,"⩴":s.MO.REL,"⩵":s.MO.REL,"⩶":s.MO.REL,"⩷":s.MO.REL,"⩸":s.MO.REL,"⩹":s.MO.REL,"⩺":s.MO.REL,"⩻":s.MO.REL,"⩼":s.MO.REL,"⩽":s.MO.REL,"⩽̸":s.MO.REL,"⩾":s.MO.REL,"⩾̸":s.MO.REL,"⩿":s.MO.REL,"⪀":s.MO.REL,"⪁":s.MO.REL,"⪂":s.MO.REL,"⪃":s.MO.REL,"⪄":s.MO.REL,"⪅":s.MO.REL,"⪆":s.MO.REL,"⪇":s.MO.REL,"⪈":s.MO.REL,"⪉":s.MO.REL,"⪊":s.MO.REL,"⪋":s.MO.REL,"⪌":s.MO.REL,"⪍":s.MO.REL,"⪎":s.MO.REL,"⪏":s.MO.REL,"⪐":s.MO.REL,"⪑":s.MO.REL,"⪒":s.MO.REL,"⪓":s.MO.REL,"⪔":s.MO.REL,"⪕":s.MO.REL,"⪖":s.MO.REL,"⪗":s.MO.REL,"⪘":s.MO.REL,"⪙":s.MO.REL,"⪚":s.MO.REL,"⪛":s.MO.REL,"⪜":s.MO.REL,"⪝":s.MO.REL,"⪞":s.MO.REL,"⪟":s.MO.REL,"⪠":s.MO.REL,"⪡":s.MO.REL,"⪡̸":s.MO.REL,"⪢":s.MO.REL,"⪢̸":s.MO.REL,"⪣":s.MO.REL,"⪤":s.MO.REL,"⪥":s.MO.REL,"⪦":s.MO.REL,"⪧":s.MO.REL,"⪨":s.MO.REL,"⪩":s.MO.REL,"⪪":s.MO.REL,"⪫":s.MO.REL,"⪬":s.MO.REL,"⪭":s.MO.REL,"⪮":s.MO.REL,"⪯":s.MO.REL,"⪯̸":s.MO.REL,"⪰":s.MO.REL,"⪰̸":s.MO.REL,"⪱":s.MO.REL,"⪲":s.MO.REL,"⪳":s.MO.REL,"⪴":s.MO.REL,"⪵":s.MO.REL,"⪶":s.MO.REL,"⪷":s.MO.REL,"⪸":s.MO.REL,"⪹":s.MO.REL,"⪺":s.MO.REL,"⪻":s.MO.REL,"⪼":s.MO.REL,"⪽":s.MO.REL,"⪾":s.MO.REL,"⪿":s.MO.REL,"⫀":s.MO.REL,"⫁":s.MO.REL,"⫂":s.MO.REL,"⫃":s.MO.REL,"⫄":s.MO.REL,"⫅":s.MO.REL,"⫆":s.MO.REL,"⫇":s.MO.REL,"⫈":s.MO.REL,"⫉":s.MO.REL,"⫊":s.MO.REL,"⫋":s.MO.REL,"⫌":s.MO.REL,"⫍":s.MO.REL,"⫎":s.MO.REL,"⫏":s.MO.REL,"⫐":s.MO.REL,"⫑":s.MO.REL,"⫒":s.MO.REL,"⫓":s.MO.REL,"⫔":s.MO.REL,"⫕":s.MO.REL,"⫖":s.MO.REL,"⫗":s.MO.REL,"⫘":s.MO.REL,"⫙":s.MO.REL,"⫚":s.MO.REL,"⫛":s.MO.REL,"⫝":s.MO.REL,"⫝̸":s.MO.REL,"⫞":s.MO.REL,"⫟":s.MO.REL,"⫠":s.MO.REL,"⫡":s.MO.REL,"⫢":s.MO.REL,"⫣":s.MO.REL,"⫤":s.MO.REL,"⫥":s.MO.REL,"⫦":s.MO.REL,"⫧":s.MO.REL,"⫨":s.MO.REL,"⫩":s.MO.REL,"⫪":s.MO.REL,"⫫":s.MO.REL,"⫬":s.MO.REL,"⫭":s.MO.REL,"⫮":s.MO.REL,"⫯":s.MO.REL,"⫰":s.MO.REL,"⫱":s.MO.REL,"⫲":s.MO.REL,"⫳":s.MO.REL,"⫴":s.MO.BIN4,"⫵":s.MO.BIN4,"⫶":s.MO.BIN4,"⫷":s.MO.REL,"⫸":s.MO.REL,"⫹":s.MO.REL,"⫺":s.MO.REL,"⫻":s.MO.BIN4,"⫽":s.MO.BIN4,"⫾":s.MO.BIN3,"⭅":s.MO.RELSTRETCH,"⭆":s.MO.RELSTRETCH,"〈":s.MO.OPEN,"〉":s.MO.CLOSE,"︷":s.MO.WIDEACCENT,"︸":s.MO.WIDEACCENT}},s.OPTABLE.infix["^"]=s.MO.WIDEREL,s.OPTABLE.infix._=s.MO.WIDEREL,s.OPTABLE.infix["⫝̸"]=s.MO.REL},9259:function(t,n,e){var o,r,i=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),u=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0"+(r.match(/\S/)?"\n"+r+e:"")+""},p.prototype.visitAnnotationNode=function(t,e){return e+""+this.childNodeMml(t,"","")+""},p.prototype.visitDefault=function(t,e){var r=t.kind,n=a(t.isToken||0===t.childNodes.length?["",""]:["\n",e],2),o=n[0],n=n[1],i=this.childNodeMml(t,e+" ",o);return e+"<"+r+this.getAttributes(t)+">"+(i.match(/\S/)?o+i+n:"")+""+r+">"},p.prototype.childNodeMml=function(t,e,r){var n,o,i="";try{for(var a=u(t.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;i+=this.visitNode(l,e)+r}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return i},p.prototype.getAttributes=function(t){var e,r,n=[],o=this.constructor.defaultAttributes[t.kind]||{},i=Object.assign({},o,this.getDataAttributes(t),t.attributes.getAllAttributes()),o=this.constructor.variants;i.hasOwnProperty("mathvariant")&&o.hasOwnProperty(i.mathvariant)&&(i.mathvariant=o[i.mathvariant]);try{for(var a=u(Object.keys(i)),s=a.next();!s.done;s=a.next()){var l=s.value,c=String(i[l]);void 0!==c&&n.push(l+'="'+this.quoteHTML(c)+'"')}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return n.length?" "+n.join(" "):""},p.prototype.getDataAttributes=function(t){var e,r={},n=t.attributes.getExplicit("mathvariant"),o=this.constructor.variants,o=(n&&o.hasOwnProperty(n)&&this.setDataAttribute(r,"variant",n),t.getProperty("variantForm")&&this.setDataAttribute(r,"alternate","1"),t.getProperty("pseudoscript")&&this.setDataAttribute(r,"pseudoscript","true"),!1===t.getProperty("autoOP")&&this.setDataAttribute(r,"auto-op","false"),t.getProperty("scriptalign")),n=(o&&this.setDataAttribute(r,"script-align",o),t.getProperty("texClass"));return void 0!==n&&(o=!0,(o=n===l.TEXCLASS.OP&&t.isKind("mi")?!(1<(e=t.getText()).length&&e.match(c.MmlMi.operatorName)):o)&&this.setDataAttribute(r,"texclass",n<0?"NONE":l.TEXCLASSNAMES[n])),t.getProperty("scriptlevel")&&!1===t.getProperty("useHeight")&&this.setDataAttribute(r,"smallmatrix","true"),r},p.prototype.setDataAttribute=function(t,e,r){t[n.DATAMJX+e]=r},p.prototype.quoteHTML=function(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/[\uD800-\uDBFF]./g,n.toEntity).replace(/[\u0080-\uD7FF\uE000-\uFFFF]/g,n.toEntity)},p.variants={"-tex-calligraphic":"script","-tex-bold-calligraphic":"bold-script","-tex-oldstyle":"normal","-tex-bold-oldstyle":"bold","-tex-mathit":"italic"},p.defaultAttributes={math:{xmlns:"http://www.w3.org/1998/Math/MathML"}},p);function p(){return null!==r&&r.apply(this,arguments)||this}n.SerializedMmlVisitor=e},2975:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractOutputJax=void 0;var n=r(7233),o=r(7525);function i(t){void 0===t&&(t={}),this.adaptor=null;var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t),this.postFilters=new o.FunctionList}Object.defineProperty(i.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),i.prototype.setAdaptor=function(t){this.adaptor=t},i.prototype.initialize=function(){},i.prototype.reset=function(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=(Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEmptyNode=e.AbstractNode=void 0,Object.defineProperty(i.prototype,"kind",{get:function(){return"unknown"},enumerable:!1,configurable:!0}),i.prototype.setProperty=function(t,e){this.properties[t]=e},i.prototype.getProperty=function(t){return this.properties[t]},i.prototype.getPropertyNames=function(){return Object.keys(this.properties)},i.prototype.getAllProperties=function(){return this.properties},i.prototype.removeProperty=function(){for(var t,e,r=[],n=0;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLDocument=void 0,r(5722)),T=r(7233),l=r(3363),c=r(3335),u=r(5138),p=r(4474),r=(i=s.AbstractMathDocument,o(h,i),h.prototype.findPosition=function(t,e,r,n){var o,i,a=this.adaptor;try{for(var s=C(n[t]),l=s.next();!l.done;l=s.next()){var c=l.value,u=A(c,2),p=u[0],h=u[1];if(e<=h&&"#text"===a.kind(p))return{node:p,n:Math.max(e,0),delim:r};e-=h}}catch(t){o={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}return{node:null,n:0,delim:r}},h.prototype.mathItem=function(t,e,r){var n=t.math,o=this.findPosition(t.n,t.start.n,t.open,r),r=this.findPosition(t.n,t.end.n,t.close,r);return new this.options.MathItem(n,e,t.display,o,r)},h.prototype.findMath=function(t){var e,r,n,o,i,a,s,l,c;if(!this.processed.isSet("findMath")){this.adaptor.document=this.document,t=(0,T.userOptions)({elements:this.options.elements||[this.adaptor.body(this.document)]},t);try{for(var u=C(this.adaptor.getElements(t.elements,this.document)),p=u.next();!p.done;p=u.next()){var h=p.value,d=A([null,null],2),f=d[0],m=d[1];try{n=void 0;for(var y=C(this.inputJax),g=y.next();!g.done;g=y.next()){var b=g.value,v=new this.options.MathList;if(b.processStrings){null===f&&(f=(i=A(this.domStrings.find(h),2))[0],m=i[1]);try{a=void 0;for(var _=C(b.findMath(f)),S=_.next();!S.done;S=_.next()){var O=S.value;v.push(this.mathItem(O,b,m))}}catch(t){a={error:t}}finally{try{S&&!S.done&&(s=_.return)&&s.call(_)}finally{if(a)throw a.error}}}else try{l=void 0;for(var M=C(b.findMath(h)),x=M.next();!x.done;x=M.next()){var O=x.value,E=new this.options.MathItem(O.math,b,O.display,O.start,O.end);v.push(E)}}catch(t){l={error:t}}finally{try{x&&!x.done&&(c=M.return)&&c.call(M)}finally{if(l)throw l.error}}this.math.merge(v)}}catch(t){n={error:t}}finally{try{g&&!g.done&&(o=y.return)&&o.call(y)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}this.processed.set("findMath")}return this},h.prototype.updateDocument=function(){return this.processed.isSet("updateDocument")||(this.addPageElements(),this.addStyleSheet(),i.prototype.updateDocument.call(this),this.processed.set("updateDocument")),this},h.prototype.addPageElements=function(){var t=this.adaptor.body(this.document),e=this.documentPageElements();e&&this.adaptor.append(t,e)},h.prototype.addStyleSheet=function(){var t,e,r=this.documentStyleSheet(),n=this.adaptor;r&&!n.parent(r)&&(t=n.head(this.document),(e=this.findSheet(t,n.getAttribute(r,"id")))?n.replace(r,e):n.append(t,r))},h.prototype.findSheet=function(t,e){var r,n;if(e)try{for(var o=C(this.adaptor.tags(t,"style")),i=o.next();!i.done;i=o.next()){var a=i.value;if(this.adaptor.getAttribute(a,"id")===e)return a}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return null},h.prototype.removeFromDocument=function(t){var e,r;if(void 0===t&&(t=!1),this.processed.isSet("updateDocument"))try{for(var n=C(this.math),o=n.next();!o.done;o=n.next()){var i=o.value;i.state()>=p.STATE.INSERTED&&i.state(p.STATE.TYPESET,t)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this.processed.clear("updateDocument"),this},h.prototype.documentStyleSheet=function(){return this.outputJax.styleSheet(this)},h.prototype.documentPageElements=function(){return this.outputJax.pageElements(this)},h.prototype.addStyles=function(t){this.styles.push(t)},h.prototype.getStyles=function(){return this.styles},h.KIND="HTML",h.OPTIONS=a(a({},s.AbstractMathDocument.OPTIONS),{renderActions:(0,T.expandable)(a(a({},s.AbstractMathDocument.OPTIONS.renderActions),{styles:[p.STATE.INSERTED+1,"","updateStyleSheet",!1]})),MathList:c.HTMLMathList,MathItem:l.HTMLMathItem,DomStrings:null}),h);function h(t,e,r){var n=this,r=A((0,T.separateOptions)(r,u.HTMLDomStrings.OPTIONS),2),o=r[0],r=r[1];return(n=i.call(this,t,e,o)||this).domStrings=n.options.DomStrings||new u.HTMLDomStrings(r),n.domStrings.adaptor=e,n.styles=[],n}e.HTMLDocument=r},5138:function(t,e,r){var a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=a.STATE.TYPESET&&(e=this.adaptor,r=this.start.node,n=e.text(""),t&&(t=this.start.delim+this.math+this.end.delim,n=this.inputJax.processStrings?e.text(t):(t=e.parse(t,"text/html"),e.firstChild(e.body(t)))),e.parent(r)&&e.replace(n,r),this.start.node=this.end.node=n,this.start.n=this.end.n=0)},s);function s(t,e,r,n,o){return i.call(this,t,e,r=void 0===r?!0:r,n=void 0===n?{node:null,n:0,delim:""}:n,o=void 0===o?{node:null,n:0,delim:""}:o)||this}e.HTMLMathItem=r},3335:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),r=(Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLMathList=void 0,o=r(9e3).AbstractMathList,i(a,o),a);function a(){return null!==o&&o.apply(this,arguments)||this}e.HTMLMathList=r},8462:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o,b=r(9007),v=n(r(1256)),n=o=o||{};function i(t,e,r){var n,o,i=[];try{for(var a=g(t.getList("m"+e+r)),s=a.next();!s.done;s=a.next()){var l,c,u=s.value,p=u.childNodes;p[u[e]]&&p[u[r]]||(l=u.parent,c=p[u[e]]?t.nodeFactory.create("node","m"+e,[p[u.base],p[u[e]]]):t.nodeFactory.create("node","m"+r,[p[u.base],p[u[r]]]),v.default.copyAttributes(u,c),l?l.replaceChild(c,u):t.root=c,i.push(u))}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}t.removeFromList("m"+e+r,i)}function a(t,e,r){var n,o,i=[];try{for(var a=g(t.getList(e)),s=a.next();!s.done;s=a.next()){var l,c,u,p=s.value;p.attributes.get("displaystyle")||(c=(l=p.childNodes[p.base]).coreMO(),l.getProperty("movablelimits")&&!c.attributes.getExplicit("movablelimits")&&(u=t.nodeFactory.create("node",r,p.childNodes),v.default.copyAttributes(p,u),p.parent?p.parent.replaceChild(u,p):t.root=u,i.push(p)))}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}t.removeFromList(e,i)}n.cleanStretchy=function(t){var e,r,n=t.data;try{for(var o=g(n.getList("fixStretchy")),i=o.next();!i.done;i=o.next()){var a,s,l,c=i.value;v.default.getProperty(c,"fixStretchy")&&((a=v.default.getForm(c))&&a[3]&&a[3].stretchy&&v.default.setAttribute(c,"stretchy",!1),s=c.parent,v.default.getTexClass(c)||a&&a[2]||(l=n.nodeFactory.create("node","TeXAtom",[c]),s.replaceChild(l,c),l.inheritAttributesFrom(c)),v.default.removeProperties(c,"fixStretchy"))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},n.cleanAttributes=function(t){t.data.root.walkTree(function(t,e){var r,n,o=t.attributes;if(o){var i=new Set((o.get("mjx-keep-attrs")||"").split(/ /));delete o.getAllAttributes()["mjx-keep-attrs"];try{for(var a=g(o.getExplicitNames()),s=a.next();!s.done;s=a.next()){var l=s.value;i.has(l)||o.attributes[l]!==t.attributes.getInherited(l)||delete o.attributes[l]}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}}},{})},n.combineRelations=function(t){var e,r,n,o,i=[];try{for(var a=g(t.data.getList("mo")),s=a.next();!s.done;s=a.next()){var l=s.value;if(!l.getProperty("relationsCombined")&&l.parent&&(!l.parent||v.default.isType(l.parent,"mrow"))&&v.default.getTexClass(l)===b.TEXCLASS.REL){for(var c=l.parent,u=void 0,p=c.childNodes,h=p.indexOf(l)+1,d=v.default.getProperty(l,"variantForm");h=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},a=(Object.defineProperty(e,"__esModule",{value:!0}),i(r(5453))),s=r(8929),l=i(r(1256)),u=r(7233);function p(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new s.NodeFactory,(this.nodeFactory.configuration=this).nodeFactory.setCreators(t.nodes),this.itemFactory=new a.default(t.items),this.itemFactory.configuration=this,u.defaultOptions.apply(void 0,o([this.options],n(e),!1)),(0,u.defaultOptions)(this.options,t.options)}p.prototype.pushParser=function(t){this.parsers.unshift(t)},p.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(p.prototype,"parser",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),p.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},p.prototype.addNode=function(t,e){var r;(this.nodeLists[t]||(this.nodeLists[t]=[])).push(e),e.kind!==t&&(r=((r=l.default.getProperty(e,"in-lists")||"")?r.split(/,/):[]).concat(t).join(","),l.default.setProperty(e,"in-lists",r))},p.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],o=[];try{for(var i=c(n),a=i.next();!a.done;a=i.next()){var s=a.value;this.inTree(s)&&o.push(s)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return this.nodeLists[t]=o},p.prototype.removeFromList=function(t,e){var r,n,o=this.nodeLists[t]||[];try{for(var i=c(e),a=i.next();!a.done;a=i.next()){var s=a.value,l=o.indexOf(s);0<=l&&o.splice(l,1)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},p.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},e.default=p},1130:function(t,e,r){var c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o,a,i,s,l,p=r(9007),h=n(r(1256)),d=n(r(8417)),f=n(r(3971)),m=r(5368);function y(t,e){var r,t=t.match((e=void 0===e?!1:e)?l:s);return t?(e=[t[1].replace(/,/,"."),t[4],t[0].length],e=c(e,3),t=e[0],r=e[1],e=e[2],"mu"!==r?[t,r,e]:[g(i[r](parseFloat(t||"1"))).slice(0,-2),"em",e]):[null,null,0]}function g(t){return Math.abs(t)<6e-4?"0em":t.toFixed(3).replace(/\.?0+$/,"")+"em"}function b(t,e,r){var n="{\\big"+r+" "+(e="{"!==e&&"}"!==e?e:"\\"+e)+"}";return new d.default("\\mathchoice"+("{\\bigg"+r+" "+e+"}")+n+n+n,{},t).mml()}function v(t,e,r){e=e.replace(/^\s+/,m.entities.nbsp).replace(/\s+$/,m.entities.nbsp);e=t.create("text",e);return t.create("node","mtext",[],r,e)}function _(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)&&(e+=" "),e.length+r.length>t.configuration.options.maxBuffer)throw new f.default("MaxBufferSize","MathJax internal buffer size exceeded; is there a recursive macro call?");return e+r}function S(t,e){for(;0e.length)throw new f.default("IllegalMacroParam","Illegal macro parameter reference");o=_(t,_(t,o,n),e[parseInt(a,10)-1]),n=""}else n+=a}return _(t,o,n)},a.addArgs=_,a.checkMaxMacros=function(t,e){if(void 0===e&&(e=!0),!(++t.macroCount<=t.configuration.options.maxMacros))throw e?new f.default("MaxMacroSub1","MathJax maximum macro substitution count exceeded; is here a recursive macro call?"):new f.default("MaxMacroSub2","MathJax maximum substitution count exceeded; is there a recursive latex environment?")},a.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new f.default("ErroneousNestingEq","Erroneous nesting of equation structures");t.stack.global.eqnenv=!0},a.copyNode=function(t,e){var t=t.copy(),s=e.configuration;return t.walkTree(function(t){s.addNode(t.kind,t);var e,r,n=(t.getProperty("in-lists")||"").split(/,/);try{for(var o=u(n),i=o.next();!i.done;i=o.next()){var a=i.value;a&&s.addNode(a,t)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}}),t},a.MmlFilterAttribute=function(t,e,r){return r},a.getFontDef=function(t){t=t.stack.env.font;return t?{mathvariant:t}:{}},a.keyvalOptions=function(i,t,e){void 0===t&&(t=null),void 0===e&&(e=!1);var r,n,o=function(){for(var t,e,r,n={},o=i;o;)e=(t=c(O(o,["=",","]),3))[0],r=t[1],o=t[2],"="===r?(r=(t=c(O(o,[","]),3))[0],t[1],o=t[2],r="false"===r||"true"===r?JSON.parse(r):r,n[e]=r):e&&(n[e]=!0);return n}();if(t)try{for(var a=u(Object.keys(o)),s=a.next();!s.done;s=a.next()){var l=s.value;if(!t.hasOwnProperty(l)){if(e)throw new f.default("InvalidOption","Invalid option: %1",l);delete o[l]}}}catch(i){r={error:i}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},e.default=o},9497:function(t,e,r){var u=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},p=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},c=(Object.defineProperty(e,"__esModule",{value:!0}),e.BaseItem=e.MmlStack=void 0,l(r(3971))),l=(Object.defineProperty(u.prototype,"nodes",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),u.prototype.Push=function(){for(var t,e=[],r=0;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},c=(Object.defineProperty(e,"__esModule",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0,l(r(8417))),l=(e.Label=n,e.TagInfo=o,u.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new o(t,e,r)},Object.defineProperty(u.prototype,"env",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),u.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},u.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},u.prototype.notag=function(){this.tag("",!0),this.currentTag.noTag=!0},Object.defineProperty(u.prototype,"noTag",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(u.prototype,"label",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),u.prototype.formatUrl=function(t,e){return e+"#"+encodeURIComponent(t)},u.prototype.formatTag=function(t){return"("+t+")"},u.prototype.formatId=function(t){return"mjx-eqn:"+t.replace(/\s/g,"_")},u.prototype.formatNumber=function(t){return t.toString()},u.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},u.prototype.clearTag=function(){this.label="",this.tag(null,!0),this.currentTag.tagId=""},u.prototype.getTag=function(t){if(t=void 0===t?!1:t)return this.autoTag(),this.makeTag();t=this.currentTag;return t.taggable&&!t.noTag&&(t.defaultTags&&this.autoTag(),t.tag)?this.makeTag():null},u.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},u.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},u.prototype.startEquation=function(t){this.history=[],this.stack=[],this.clearTag(),this.currentTag=new o("",void 0,void 0),this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;t=t.inputData.recompile;t&&(this.refUpdate=!0,this.counter=t.counter)},u.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},u.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;e=this.makeTag();return this.enTag(t,e)},u.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},u.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new n(this.currentTag.tag,this.currentTag.tagId));var t=new c.default("\\text{"+this.currentTag.tagFormat+"}",{},this.configuration).mml();return this.configuration.nodeFactory.create("node","mtd",[t],{id:this.currentTag.tagId})},u);function u(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new o,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,t=r.create("node","mtd",[t]),e=r.create("node","mlabeledtr",[e,t]);return r.create("node","mtable",[e],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}e.AbstractTags=l;a(h,p=l),h.prototype.autoTag=function(){},h.prototype.getTag=function(){return this.currentTag.tag?p.prototype.getTag.call(this):null};var p,r=h;function h(){return null!==p&&p.apply(this,arguments)||this}e.NoTags=r;a(g,d=l),g.prototype.finalize=function(t,e){if(!e.display||this.history.find(function(t){return t.taggable}))return t;e=this.getTag(!0);return this.enTag(t,e)};var d,f,m,y,a=g;function g(){return null!==d&&d.apply(this,arguments)||this}e.AllTags=a,f=e.TagsFactory||(e.TagsFactory={}),m=new Map([["none",r],["all",a]]),y="none",f.OPTIONS={tags:y,tagSide:"right",tagIndent:"0.8em",useLabelIds:!0,ignoreDuplicateLabels:!1},f.add=function(t,e){m.set(t,e)},f.addTags=function(t){var e,r;try{for(var n=s(Object.keys(t)),o=n.next();!o.done;o=n.next()){var i=o.value;f.add(i,t[i])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},f.create=function(t){t=m.get(t)||m.get(y);if(t)return new t;throw Error("Unknown tags class")},f.setDefault=function(t){y=t},f.getDefault=function(){return f.create(y)}},8317:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.TexConstant=void 0,(e=e.TexConstant||(e.TexConstant={})).Variant={NORMAL:"normal",BOLD:"bold",ITALIC:"italic",BOLDITALIC:"bold-italic",DOUBLESTRUCK:"double-struck",FRAKTUR:"fraktur",BOLDFRAKTUR:"bold-fraktur",SCRIPT:"script",BOLDSCRIPT:"bold-script",SANSSERIF:"sans-serif",BOLDSANSSERIF:"bold-sans-serif",SANSSERIFITALIC:"sans-serif-italic",SANSSERIFBOLDITALIC:"sans-serif-bold-italic",MONOSPACE:"monospace",INITIAL:"inital",TAILED:"tailed",LOOPED:"looped",STRETCHED:"stretched",CALLIGRAPHIC:"-tex-calligraphic",BOLDCALLIGRAPHIC:"-tex-bold-calligraphic",OLDSTYLE:"-tex-oldstyle",BOLDOLDSTYLE:"-tex-bold-oldstyle",MATHITALIC:"-tex-mathit"},e.Form={PREFIX:"prefix",INFIX:"infix",POSTFIX:"postfix"},e.LineBreak={AUTO:"auto",NEWLINE:"newline",NOBREAK:"nobreak",GOODBREAK:"goodbreak",BADBREAK:"badbreak"},e.LineBreakStyle={BEFORE:"before",AFTER:"after",DUPLICATE:"duplicate",INFIXLINBREAKSTYLE:"infixlinebreakstyle"},e.IndentAlign={LEFT:"left",CENTER:"center",RIGHT:"right",AUTO:"auto",ID:"id",INDENTALIGN:"indentalign"},e.IndentShift={INDENTSHIFT:"indentshift"},e.LineThickness={THIN:"thin",MEDIUM:"medium",THICK:"thick"},e.Notation={LONGDIV:"longdiv",ACTUARIAL:"actuarial",PHASORANGLE:"phasorangle",RADICAL:"radical",BOX:"box",ROUNDEDBOX:"roundedbox",CIRCLE:"circle",LEFT:"left",RIGHT:"right",TOP:"top",BOTTOM:"bottom",UPDIAGONALSTRIKE:"updiagonalstrike",DOWNDIAGONALSTRIKE:"downdiagonalstrike",VERTICALSTRIKE:"verticalstrike",HORIZONTALSTRIKE:"horizontalstrike",NORTHEASTARROW:"northeastarrow",MADRUWB:"madruwb",UPDIAGONALARROW:"updiagonalarrow"},e.Align={TOP:"top",BOTTOM:"bottom",CENTER:"center",BASELINE:"baseline",AXIS:"axis",LEFT:"left",RIGHT:"right"},e.Lines={NONE:"none",SOLID:"solid",DASHED:"dashed"},e.Side={LEFT:"left",RIGHT:"right",LEFTOVERLAP:"leftoverlap",RIGHTOVERLAP:"rightoverlap"},e.Width={AUTO:"auto",FIT:"fit"},e.Actiontype={TOGGLE:"toggle",STATUSLINE:"statusline",TOOLTIP:"tooltip",INPUT:"input"},e.Overflow={LINBREAK:"linebreak",SCROLL:"scroll",ELIDE:"elide",TRUNCATE:"truncate",SCALE:"scale"},e.Unit={EM:"em",EX:"ex",PX:"px",IN:"in",CM:"cm",MM:"mm",PT:"pt",PC:"pc"}},3971:function(t,e){function a(t,e){for(var r=[],n=2;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0t)throw new p.default("XalignOverflow","Extra %1 in row of %2","&",this.name)},m.prototype.EndRow=function(){for(var t,e=this.row,r=this.getProperty("xalignat");e.lengththis.maxrow&&(this.maxrow=this.row.length),f.prototype.EndRow.call(this);var n,o=this.table[this.table.length-1];this.getProperty("zeroWidthLabel")&&o.isKind("mlabeledtr")&&(o=u.default.getChildren(o)[0],n=this.factory.configuration.options.tagSide,n=a({width:0},"right"===n?{lspace:"-1width"}:{}),n=this.create("node","mpadded",u.default.getChildren(o),n),o.setChildren([n]))},m.prototype.EndTable=function(){f.prototype.EndTable.call(this),this.center&&this.maxrow<=2&&(delete this.arraydef.width,delete this.global.indentalign)};var f,r=m;function m(t,e,r,n,o){t=f.call(this,t)||this;return t.name=e,t.numbered=r,t.padded=n,t.center=o,t.factory.configuration.tags.start(e,r,r),t}e.FlalignItem=r},7379:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){t[n=void 0===n?r:n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},e=(Object.defineProperty(e,"__esModule",{value:!0}),r(4387)),i=i(r(9140)),s=r(8317),l=a(r(5450)),a=a(r(1130)),c=r(9007),r=r(6010);new i.CharacterMap("AMSmath-mathchar0mo",l.default.mathchar0mo,{iiiint:["⨌",{texClass:c.TEXCLASS.OP}]}),new i.RegExpMap("AMSmath-operatorLetter",e.AmsMethods.operatorLetter,/[-*]/i),new i.CommandMap("AMSmath-macros",{mathring:["Accent","02DA"],nobreakspace:"Tilde",negmedspace:["Spacer",r.MATHSPACE.negativemediummathspace],negthickspace:["Spacer",r.MATHSPACE.negativethickmathspace],idotsint:["MultiIntegral","\\int\\cdots\\int"],dddot:["Accent","20DB"],ddddot:["Accent","20DC"],sideset:"SideSet",boxed:["Macro","\\fbox{$\\displaystyle{#1}$}",1],tag:"HandleTag",notag:"HandleNoTag",eqref:["HandleRef",!0],substack:["Macro","\\begin{subarray}{c}#1\\end{subarray}",1],injlim:["NamedOp","inj lim"],projlim:["NamedOp","proj lim"],varliminf:["Macro","\\mathop{\\underline{\\mmlToken{mi}{lim}}}"],varlimsup:["Macro","\\mathop{\\overline{\\mmlToken{mi}{lim}}}"],varinjlim:["Macro","\\mathop{\\underrightarrow{\\mmlToken{mi}{lim}}}"],varprojlim:["Macro","\\mathop{\\underleftarrow{\\mmlToken{mi}{lim}}}"],DeclareMathOperator:"HandleDeclareOp",operatorname:"HandleOperatorName",genfrac:"Genfrac",frac:["Genfrac","","","",""],tfrac:["Genfrac","","","","1"],dfrac:["Genfrac","","","","0"],binom:["Genfrac","(",")","0",""],tbinom:["Genfrac","(",")","0","1"],dbinom:["Genfrac","(",")","0","0"],cfrac:"CFrac",shoveleft:["HandleShove",s.TexConstant.Align.LEFT],shoveright:["HandleShove",s.TexConstant.Align.RIGHT],xrightarrow:["xArrow",8594,5,10],xleftarrow:["xArrow",8592,10,5]},e.AmsMethods),new i.EnvironmentMap("AMSmath-environment",l.default.environment,{"equation*":["Equation",null,!1],"eqnarray*":["EqnArray",null,!1,!0,"rcl",a.default.cols(0,r.MATHSPACE.thickmathspace),".5em"],align:["EqnArray",null,!0,!0,"rl",a.default.cols(0,2)],"align*":["EqnArray",null,!1,!0,"rl",a.default.cols(0,2)],multline:["Multline",null,!0],"multline*":["Multline",null,!1],split:["EqnArray",null,!1,!1,"rl",a.default.cols(0)],gather:["EqnArray",null,!0,!0,"c"],"gather*":["EqnArray",null,!1,!0,"c"],alignat:["AlignAt",null,!0,!0],"alignat*":["AlignAt",null,!1,!0],alignedat:["AlignAt",null,!1,!1],aligned:["AmsEqnArray",null,null,null,"rl",a.default.cols(0,2),".5em","D"],gathered:["AmsEqnArray",null,null,null,"c",null,".5em","D"],xalignat:["XalignAt",null,!0,!0],"xalignat*":["XalignAt",null,!1,!0],xxalignat:["XalignAt",null,!1,!1],flalign:["FlalignArray",null,!0,!1,!0,"rlc","auto auto fit"],"flalign*":["FlalignArray",null,!1,!1,!0,"rlc","auto auto fit"],subarray:["Array",null,null,null,null,a.default.cols(0),"0.1em","S",1],smallmatrix:["Array",null,null,null,"c",a.default.cols(1/3),".2em","S",1],matrix:["Array",null,null,null,"c"],pmatrix:["Array",null,"(",")","c"],bmatrix:["Array",null,"[","]","c"],Bmatrix:["Array",null,"\\{","\\}","c"],vmatrix:["Array",null,"\\vert","\\vert","c"],Vmatrix:["Array",null,"\\Vert","\\Vert","c"],cases:["Array",null,"\\{",".","ll",null,".2em","T"]},e.AmsMethods),new i.DelimiterMap("AMSmath-delimiter",l.default.delimiter,{"\\lvert":["|",{texClass:c.TEXCLASS.OPEN}],"\\rvert":["|",{texClass:c.TEXCLASS.CLOSE}],"\\lVert":["‖",{texClass:c.TEXCLASS.OPEN}],"\\rVert":["‖",{texClass:c.TEXCLASS.CLOSE}]}),new i.CharacterMap("AMSsymbols-mathchar0mi",l.default.mathchar0mi,{digamma:"ϝ",varkappa:"ϰ",varGamma:["Γ",{mathvariant:s.TexConstant.Variant.ITALIC}],varDelta:["Δ",{mathvariant:s.TexConstant.Variant.ITALIC}],varTheta:["Θ",{mathvariant:s.TexConstant.Variant.ITALIC}],varLambda:["Λ",{mathvariant:s.TexConstant.Variant.ITALIC}],varXi:["Ξ",{mathvariant:s.TexConstant.Variant.ITALIC}],varPi:["Π",{mathvariant:s.TexConstant.Variant.ITALIC}],varSigma:["Σ",{mathvariant:s.TexConstant.Variant.ITALIC}],varUpsilon:["Υ",{mathvariant:s.TexConstant.Variant.ITALIC}],varPhi:["Φ",{mathvariant:s.TexConstant.Variant.ITALIC}],varPsi:["Ψ",{mathvariant:s.TexConstant.Variant.ITALIC}],varOmega:["Ω",{mathvariant:s.TexConstant.Variant.ITALIC}],beth:"ℶ",gimel:"ℷ",daleth:"ℸ",backprime:["‵",{variantForm:!0}],hslash:"ℏ",varnothing:["∅",{variantForm:!0}],blacktriangle:"▴",triangledown:["▽",{variantForm:!0}],blacktriangledown:"▾",square:"◻",Box:"◻",blacksquare:"◼",lozenge:"◊",Diamond:"◊",blacklozenge:"⧫",circledS:["Ⓢ",{mathvariant:s.TexConstant.Variant.NORMAL}],bigstar:"★",sphericalangle:"∢",measuredangle:"∡",nexists:"∄",complement:"∁",mho:"℧",eth:["ð",{mathvariant:s.TexConstant.Variant.NORMAL}],Finv:"Ⅎ",diagup:"╱",Game:"⅁",diagdown:"╲",Bbbk:["k",{mathvariant:s.TexConstant.Variant.DOUBLESTRUCK}],yen:"¥",circledR:"®",checkmark:"✓",maltese:"✠"}),new i.CharacterMap("AMSsymbols-mathchar0mo",l.default.mathchar0mo,{dotplus:"∔",ltimes:"⋉",smallsetminus:["∖",{variantForm:!0}],rtimes:"⋊",Cap:"⋒",doublecap:"⋒",leftthreetimes:"⋋",Cup:"⋓",doublecup:"⋓",rightthreetimes:"⋌",barwedge:"⊼",curlywedge:"⋏",veebar:"⊻",curlyvee:"⋎",doublebarwedge:"⩞",boxminus:"⊟",circleddash:"⊝",boxtimes:"⊠",circledast:"⊛",boxdot:"⊡",circledcirc:"⊚",boxplus:"⊞",centerdot:["⋅",{variantForm:!0}],divideontimes:"⋇",intercal:"⊺",leqq:"≦",geqq:"≧",leqslant:"⩽",geqslant:"⩾",eqslantless:"⪕",eqslantgtr:"⪖",lesssim:"≲",gtrsim:"≳",lessapprox:"⪅",gtrapprox:"⪆",approxeq:"≊",lessdot:"⋖",gtrdot:"⋗",lll:"⋘",llless:"⋘",ggg:"⋙",gggtr:"⋙",lessgtr:"≶",gtrless:"≷",lesseqgtr:"⋚",gtreqless:"⋛",lesseqqgtr:"⪋",gtreqqless:"⪌",doteqdot:"≑",Doteq:"≑",eqcirc:"≖",risingdotseq:"≓",circeq:"≗",fallingdotseq:"≒",triangleq:"≜",backsim:"∽",thicksim:["∼",{variantForm:!0}],backsimeq:"⋍",thickapprox:["≈",{variantForm:!0}],subseteqq:"⫅",supseteqq:"⫆",Subset:"⋐",Supset:"⋑",sqsubset:"⊏",sqsupset:"⊐",preccurlyeq:"≼",succcurlyeq:"≽",curlyeqprec:"⋞",curlyeqsucc:"⋟",precsim:"≾",succsim:"≿",precapprox:"⪷",succapprox:"⪸",vartriangleleft:"⊲",lhd:"⊲",vartriangleright:"⊳",rhd:"⊳",trianglelefteq:"⊴",unlhd:"⊴",trianglerighteq:"⊵",unrhd:"⊵",vDash:["⊨",{variantForm:!0}],Vdash:"⊩",Vvdash:"⊪",smallsmile:["⌣",{variantForm:!0}],shortmid:["∣",{variantForm:!0}],smallfrown:["⌢",{variantForm:!0}],shortparallel:["∥",{variantForm:!0}],bumpeq:"≏",between:"≬",Bumpeq:"≎",pitchfork:"⋔",varpropto:["∝",{variantForm:!0}],backepsilon:"∍",blacktriangleleft:"◂",blacktriangleright:"▸",therefore:"∴",because:"∵",eqsim:"≂",vartriangle:["△",{variantForm:!0}],Join:"⋈",nless:"≮",ngtr:"≯",nleq:"≰",ngeq:"≱",nleqslant:["⪇",{variantForm:!0}],ngeqslant:["⪈",{variantForm:!0}],nleqq:["≰",{variantForm:!0}],ngeqq:["≱",{variantForm:!0}],lneq:"⪇",gneq:"⪈",lneqq:"≨",gneqq:"≩",lvertneqq:["≨",{variantForm:!0}],gvertneqq:["≩",{variantForm:!0}],lnsim:"⋦",gnsim:"⋧",lnapprox:"⪉",gnapprox:"⪊",nprec:"⊀",nsucc:"⊁",npreceq:["⋠",{variantForm:!0}],nsucceq:["⋡",{variantForm:!0}],precneqq:"⪵",succneqq:"⪶",precnsim:"⋨",succnsim:"⋩",precnapprox:"⪹",succnapprox:"⪺",nsim:"≁",ncong:"≇",nshortmid:["∤",{variantForm:!0}],nshortparallel:["∦",{variantForm:!0}],nmid:"∤",nparallel:"∦",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",ntriangleleft:"⋪",ntriangleright:"⋫",ntrianglelefteq:"⋬",ntrianglerighteq:"⋭",nsubseteq:"⊈",nsupseteq:"⊉",nsubseteqq:["⊈",{variantForm:!0}],nsupseteqq:["⊉",{variantForm:!0}],subsetneq:"⊊",supsetneq:"⊋",varsubsetneq:["⊊",{variantForm:!0}],varsupsetneq:["⊋",{variantForm:!0}],subsetneqq:"⫋",supsetneqq:"⫌",varsubsetneqq:["⫋",{variantForm:!0}],varsupsetneqq:["⫌",{variantForm:!0}],leftleftarrows:"⇇",rightrightarrows:"⇉",leftrightarrows:"⇆",rightleftarrows:"⇄",Lleftarrow:"⇚",Rrightarrow:"⇛",twoheadleftarrow:"↞",twoheadrightarrow:"↠",leftarrowtail:"↢",rightarrowtail:"↣",looparrowleft:"↫",looparrowright:"↬",leftrightharpoons:"⇋",rightleftharpoons:["⇌",{variantForm:!0}],curvearrowleft:"↶",curvearrowright:"↷",circlearrowleft:"↺",circlearrowright:"↻",Lsh:"↰",Rsh:"↱",upuparrows:"⇈",downdownarrows:"⇊",upharpoonleft:"↿",upharpoonright:"↾",downharpoonleft:"⇃",restriction:"↾",multimap:"⊸",downharpoonright:"⇂",leftrightsquigarrow:"↭",rightsquigarrow:"⇝",leadsto:"⇝",dashrightarrow:"⇢",dashleftarrow:"⇠",nleftarrow:"↚",nrightarrow:"↛",nLeftarrow:"⇍",nRightarrow:"⇏",nleftrightarrow:"↮",nLeftrightarrow:"⇎"}),new i.DelimiterMap("AMSsymbols-delimiter",l.default.delimiter,{"\\ulcorner":"⌜","\\urcorner":"⌝","\\llcorner":"⌞","\\lrcorner":"⌟"}),new i.CommandMap("AMSsymbols-macros",{implies:["Macro","\\;\\Longrightarrow\\;"],impliedby:["Macro","\\;\\Longleftarrow\\;"]},e.AmsMethods)},4387:function(t,u,e){var o=this&&this.__assign||function(){return(o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=(Object.defineProperty(e,"__esModule",{value:!0}),e.AutoloadConfiguration=void 0,r(9899)),o=r(9140),C=r(8803),T=r(7741),y=r(265),i=r(7233);function N(t,e,r,n){var o,i,a,s;if(y.Package.packages.has(t.options.require.prefix+r)){var l=t.options.autoload[r],l=E(2===l.length&&Array.isArray(l[0])?l:[l,[]],2),c=l[0],l=l[1];try{for(var u=A(c),p=u.next();!p.done;p=u.next()){var h=p.value;w.remove(h)}}catch(t){o={error:t}}finally{try{p&&!p.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}try{for(var d=A(l),f=d.next();!f.done;f=d.next()){var m=f.value;L.remove(m)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=d.return)&&s.call(d)}finally{if(a)throw a.error}}t.string=(n?e+" ":"\\begin{"+e.slice(1)+"}")+t.string.slice(t.i),t.i=0}(0,T.RequireLoad)(t,r)}var w=new o.CommandMap("autoload-macros",{},{}),L=new o.CommandMap("autoload-environments",{},{});e.AutoloadConfiguration=n.Configuration.create("autoload",{handler:{macro:["autoload-macros"],environment:["autoload-environments"]},options:{autoload:(0,i.expandable)({action:["toggle","mathtip","texttip"],amscd:[[],["CD"]],bbox:["bbox"],boldsymbol:["boldsymbol"],braket:["bra","ket","braket","set","Bra","Ket","Braket","Set","ketbra","Ketbra"],bussproofs:[[],["prooftree"]],cancel:["cancel","bcancel","xcancel","cancelto"],color:["color","definecolor","textcolor","colorbox","fcolorbox"],enclose:["enclose"],extpfeil:["xtwoheadrightarrow","xtwoheadleftarrow","xmapsto","xlongequal","xtofrom","Newextarrow"],html:["href","class","style","cssId"],mhchem:["ce","pu"],newcommand:["newcommand","renewcommand","newenvironment","renewenvironment","def","let"],unicode:["unicode"],verb:["verb"]})},config:function(t,e){var r,n,o,i,a,s,l=e.parseOptions,c=l.handlers.get("macro"),u=l.handlers.get("environment"),p=l.options.autoload;l.packageData.set("autoload",{Autoload:N});try{for(var h=A(Object.keys(p)),d=h.next();!d.done;d=h.next()){var f=d.value,m=p[f],y=E(2===m.length&&Array.isArray(m[0])?m:[m,[]],2),g=y[0],b=y[1];try{o=void 0;for(var v=A(g),_=v.next();!_.done;_=v.next()){var S=_.value;c.lookup(S)&&"color"!==S||w.add(S,new C.Macro(S,N,[f,!0]))}}catch(t){o={error:t}}finally{try{_&&!_.done&&(i=v.return)&&i.call(v)}finally{if(o)throw o.error}}try{a=void 0;for(var O=A(b),M=O.next();!M.done;M=O.next()){var x=M.value;u.lookup(x)||L.add(x,new C.Macro(x,N,[f,!1]))}}catch(t){a={error:t}}finally{try{M&&!M.done&&(s=O.return)&&s.call(O)}finally{if(a)throw a.error}}}}catch(t){r={error:t}}finally{try{d&&!d.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}l.packageData.get("require")||T.RequireConfiguration.config(t,e)},init:function(t){t.options.require||(0,i.defaultOptions)(t.options,T.RequireConfiguration.options)},priority:10})},2942:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){t[n=void 0===n?r:n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},u=(Object.defineProperty(e,"__esModule",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0,r(9899)),p=r(2947),h=l(r(3971)),d=l(r(1256)),l=r(9140),s=s(r(1181)),f=r(6521),m=(r(1267),r(4082));function y(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=p.MapHandler.getMap("remap").lookup(e),o=(0,m.getRange)(e),i=o?o[3]:"mo",r=t.create("token",i,r,n?n.char:e);o[4]&&r.attributes.set("mathvariant",o[4]),"mo"===i&&(d.default.setProperty(r,"fixStretchy",!0),t.configuration.addNode("fixStretchy",r)),t.Push(r)}new l.CharacterMap("remap",null,{"-":"−","*":"∗","`":"‘"}),e.Other=y;g=f.AbstractTags,o(b,g);var g,r=b;function b(){return null!==g&&g.apply(this,arguments)||this}e.BaseTags=r,e.BaseConfiguration=u.Configuration.create("base",{handler:{character:["command","special","letter","digit"],delimiter:["delimiter"],macro:["delimiter","macros","mathchar0mi","mathchar0mo","mathchar7"],environment:["environment"]},fallback:{character:y,macro:function(t,e){throw new h.default("UndefinedControlSequence","Undefined control sequence %1","\\"+e)},environment:function(t,e){throw new h.default("UnknownEnv","Unknown environment '%1'",e)}},items:((l={})[s.StartItem.prototype.kind]=s.StartItem,l[s.StopItem.prototype.kind]=s.StopItem,l[s.OpenItem.prototype.kind]=s.OpenItem,l[s.CloseItem.prototype.kind]=s.CloseItem,l[s.PrimeItem.prototype.kind]=s.PrimeItem,l[s.SubsupItem.prototype.kind]=s.SubsupItem,l[s.OverItem.prototype.kind]=s.OverItem,l[s.LeftItem.prototype.kind]=s.LeftItem,l[s.Middle.prototype.kind]=s.Middle,l[s.RightItem.prototype.kind]=s.RightItem,l[s.BeginItem.prototype.kind]=s.BeginItem,l[s.EndItem.prototype.kind]=s.EndItem,l[s.StyleItem.prototype.kind]=s.StyleItem,l[s.PositionItem.prototype.kind]=s.PositionItem,l[s.CellItem.prototype.kind]=s.CellItem,l[s.MmlItem.prototype.kind]=s.MmlItem,l[s.FnItem.prototype.kind]=s.FnItem,l[s.NotItem.prototype.kind]=s.NotItem,l[s.NonscriptItem.prototype.kind]=s.NonscriptItem,l[s.DotsItem.prototype.kind]=s.DotsItem,l[s.ArrayItem.prototype.kind]=s.ArrayItem,l[s.EqnArrayItem.prototype.kind]=s.EqnArrayItem,l[s.EquationItem.prototype.kind]=s.EquationItem,l),options:{maxMacros:1e3,baseURL:"undefined"==typeof document||0===document.getElementsByTagName("base").length?"":String(document.location).replace(/#.*$/,"")},tags:{base:r},postprocessors:[[function(t){var e,r,n=t.data;try{for(var o=c(n.getList("nonscript")),i=o.next();!i.done;i=o.next()){var a,s,l=i.value;0this.maxrow&&(this.maxrow=this.row.length);var t="mtr",e=this.factory.configuration.tags.getTag(),e=(e&&(this.row=[e].concat(this.row),t="mlabeledtr"),this.factory.configuration.tags.clearTag(),this.create("node",t,this.row));this.table.push(e),this.row=[]},R.prototype.EndTable=function(){it.prototype.EndTable.call(this),this.factory.configuration.tags.end(),this.extendArray("columnalign",this.maxrow),this.extendArray("columnwidth",this.maxrow),this.extendArray("columnspacing",this.maxrow-1)},R.prototype.extendArray=function(t,e){if(this.arraydef[t]){var r=this.arraydef[t].split(/ /),n=D([],o(r),!1);if(1",succ:"≻",prec:"≺",approx:"≈",succeq:"⪰",preceq:"⪯",supset:"⊃",subset:"⊂",supseteq:"⊇",subseteq:"⊆",in:"∈",ni:"∋",notin:"∉",owns:"∋",gg:"≫",ll:"≪",sim:"∼",simeq:"≃",perp:"⊥",equiv:"≡",asymp:"≍",smile:"⌣",frown:"⌢",ne:"≠",neq:"≠",cong:"≅",doteq:"≐",bowtie:"⋈",models:"⊨",notChar:"⧸",Leftrightarrow:"⇔",Leftarrow:"⇐",Rightarrow:"⇒",leftrightarrow:"↔",leftarrow:"←",gets:"←",rightarrow:"→",to:["→",{accent:!1}],mapsto:"↦",leftharpoonup:"↼",leftharpoondown:"↽",rightharpoonup:"⇀",rightharpoondown:"⇁",nearrow:"↗",searrow:"↘",nwarrow:"↖",swarrow:"↙",rightleftharpoons:"⇌",hookrightarrow:"↪",hookleftarrow:"↩",longleftarrow:"⟵",Longleftarrow:"⟸",longrightarrow:"⟶",Longrightarrow:"⟹",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",ldots:"…",cdots:"⋯",vdots:"⋮",ddots:"⋱",dotsc:"…",dotsb:"⋯",dotsm:"⋯",dotsi:"⋯",dotso:"…",ldotp:[".",{texClass:c.TEXCLASS.PUNCT}],cdotp:["⋅",{texClass:c.TEXCLASS.PUNCT}],colon:[":",{texClass:c.TEXCLASS.PUNCT}]}),new e.CharacterMap("mathchar7",l.default.mathchar7,{Gamma:"Γ",Delta:"Δ",Theta:"Θ",Lambda:"Λ",Xi:"Ξ",Pi:"Π",Sigma:"Σ",Upsilon:"Υ",Phi:"Φ",Psi:"Ψ",Omega:"Ω",_:"_","#":"#",$:"$","%":"%","&":"&",And:"&"}),new e.DelimiterMap("delimiter",l.default.delimiter,{"(":"(",")":")","[":"[","]":"]","<":"⟨",">":"⟩","\\lt":"⟨","\\gt":"⟩","/":"/","|":["|",{texClass:c.TEXCLASS.ORD}],".":"","\\\\":"\\","\\lmoustache":"⎰","\\rmoustache":"⎱","\\lgroup":"⟮","\\rgroup":"⟯","\\arrowvert":"⏐","\\Arrowvert":"‖","\\bracevert":"⎪","\\Vert":["‖",{texClass:c.TEXCLASS.ORD}],"\\|":["‖",{texClass:c.TEXCLASS.ORD}],"\\vert":["|",{texClass:c.TEXCLASS.ORD}],"\\uparrow":"↑","\\downarrow":"↓","\\updownarrow":"↕","\\Uparrow":"⇑","\\Downarrow":"⇓","\\Updownarrow":"⇕","\\backslash":"\\","\\rangle":"⟩","\\langle":"⟨","\\rbrace":"}","\\lbrace":"{","\\}":"}","\\{":"{","\\rceil":"⌉","\\lceil":"⌈","\\rfloor":"⌋","\\lfloor":"⌊","\\lbrack":"[","\\rbrack":"]"}),new e.CommandMap("macros",{displaystyle:["SetStyle","D",!0,0],textstyle:["SetStyle","T",!1,0],scriptstyle:["SetStyle","S",!1,1],scriptscriptstyle:["SetStyle","SS",!1,2],rm:["SetFont",i.TexConstant.Variant.NORMAL],mit:["SetFont",i.TexConstant.Variant.ITALIC],oldstyle:["SetFont",i.TexConstant.Variant.OLDSTYLE],cal:["SetFont",i.TexConstant.Variant.CALLIGRAPHIC],it:["SetFont",i.TexConstant.Variant.MATHITALIC],bf:["SetFont",i.TexConstant.Variant.BOLD],bbFont:["SetFont",i.TexConstant.Variant.DOUBLESTRUCK],scr:["SetFont",i.TexConstant.Variant.SCRIPT],frak:["SetFont",i.TexConstant.Variant.FRAKTUR],sf:["SetFont",i.TexConstant.Variant.SANSSERIF],tt:["SetFont",i.TexConstant.Variant.MONOSPACE],mathrm:["MathFont",i.TexConstant.Variant.NORMAL],mathup:["MathFont",i.TexConstant.Variant.NORMAL],mathnormal:["MathFont",""],mathbf:["MathFont",i.TexConstant.Variant.BOLD],mathbfup:["MathFont",i.TexConstant.Variant.BOLD],mathit:["MathFont",i.TexConstant.Variant.MATHITALIC],mathbfit:["MathFont",i.TexConstant.Variant.BOLDITALIC],mathbb:["MathFont",i.TexConstant.Variant.DOUBLESTRUCK],Bbb:["MathFont",i.TexConstant.Variant.DOUBLESTRUCK],mathfrak:["MathFont",i.TexConstant.Variant.FRAKTUR],mathbffrak:["MathFont",i.TexConstant.Variant.BOLDFRAKTUR],mathscr:["MathFont",i.TexConstant.Variant.SCRIPT],mathbfscr:["MathFont",i.TexConstant.Variant.BOLDSCRIPT],mathsf:["MathFont",i.TexConstant.Variant.SANSSERIF],mathsfup:["MathFont",i.TexConstant.Variant.SANSSERIF],mathbfsf:["MathFont",i.TexConstant.Variant.BOLDSANSSERIF],mathbfsfup:["MathFont",i.TexConstant.Variant.BOLDSANSSERIF],mathsfit:["MathFont",i.TexConstant.Variant.SANSSERIFITALIC],mathbfsfit:["MathFont",i.TexConstant.Variant.SANSSERIFBOLDITALIC],mathtt:["MathFont",i.TexConstant.Variant.MONOSPACE],mathcal:["MathFont",i.TexConstant.Variant.CALLIGRAPHIC],mathbfcal:["MathFont",i.TexConstant.Variant.BOLDCALLIGRAPHIC],symrm:["MathFont",i.TexConstant.Variant.NORMAL],symup:["MathFont",i.TexConstant.Variant.NORMAL],symnormal:["MathFont",""],symbf:["MathFont",i.TexConstant.Variant.BOLD],symbfup:["MathFont",i.TexConstant.Variant.BOLD],symit:["MathFont",i.TexConstant.Variant.ITALIC],symbfit:["MathFont",i.TexConstant.Variant.BOLDITALIC],symbb:["MathFont",i.TexConstant.Variant.DOUBLESTRUCK],symfrak:["MathFont",i.TexConstant.Variant.FRAKTUR],symbffrak:["MathFont",i.TexConstant.Variant.BOLDFRAKTUR],symscr:["MathFont",i.TexConstant.Variant.SCRIPT],symbfscr:["MathFont",i.TexConstant.Variant.BOLDSCRIPT],symsf:["MathFont",i.TexConstant.Variant.SANSSERIF],symsfup:["MathFont",i.TexConstant.Variant.SANSSERIF],symbfsf:["MathFont",i.TexConstant.Variant.BOLDSANSSERIF],symbfsfup:["MathFont",i.TexConstant.Variant.BOLDSANSSERIF],symsfit:["MathFont",i.TexConstant.Variant.SANSSERIFITALIC],symbfsfit:["MathFont",i.TexConstant.Variant.SANSSERIFBOLDITALIC],symtt:["MathFont",i.TexConstant.Variant.MONOSPACE],symcal:["MathFont",i.TexConstant.Variant.CALLIGRAPHIC],symbfcal:["MathFont",i.TexConstant.Variant.BOLDCALLIGRAPHIC],textrm:["HBox",null,i.TexConstant.Variant.NORMAL],textup:["HBox",null,i.TexConstant.Variant.NORMAL],textnormal:["HBox"],textit:["HBox",null,i.TexConstant.Variant.ITALIC],textbf:["HBox",null,i.TexConstant.Variant.BOLD],textsf:["HBox",null,i.TexConstant.Variant.SANSSERIF],texttt:["HBox",null,i.TexConstant.Variant.MONOSPACE],tiny:["SetSize",.5],Tiny:["SetSize",.6],scriptsize:["SetSize",.7],small:["SetSize",.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],arcsin:"NamedFn",arccos:"NamedFn",arctan:"NamedFn",arg:"NamedFn",cos:"NamedFn",cosh:"NamedFn",cot:"NamedFn",coth:"NamedFn",csc:"NamedFn",deg:"NamedFn",det:"NamedOp",dim:"NamedFn",exp:"NamedFn",gcd:"NamedOp",hom:"NamedFn",inf:"NamedOp",ker:"NamedFn",lg:"NamedFn",lim:"NamedOp",liminf:["NamedOp","lim inf"],limsup:["NamedOp","lim sup"],ln:"NamedFn",log:"NamedFn",max:"NamedOp",min:"NamedOp",Pr:"NamedOp",sec:"NamedFn",sin:"NamedFn",sinh:"NamedFn",sup:"NamedOp",tan:"NamedFn",tanh:"NamedFn",limits:["Limits",1],nolimits:["Limits",0],overline:["UnderOver","2015"],underline:["UnderOver","2015"],overbrace:["UnderOver","23DE",1],underbrace:["UnderOver","23DF",1],overparen:["UnderOver","23DC"],underparen:["UnderOver","23DD"],overrightarrow:["UnderOver","2192"],underrightarrow:["UnderOver","2192"],overleftarrow:["UnderOver","2190"],underleftarrow:["UnderOver","2190"],overleftrightarrow:["UnderOver","2194"],underleftrightarrow:["UnderOver","2194"],overset:"Overset",underset:"Underset",overunderset:"Overunderset",stackrel:["Macro","\\mathrel{\\mathop{#2}\\limits^{#1}}",2],stackbin:["Macro","\\mathbin{\\mathop{#2}\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",middle:"LeftRight",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft:"MoveLeftRight",moveright:"MoveLeftRight",",":["Spacer",r.MATHSPACE.thinmathspace],":":["Spacer",r.MATHSPACE.mediummathspace],">":["Spacer",r.MATHSPACE.mediummathspace],";":["Spacer",r.MATHSPACE.thickmathspace],"!":["Spacer",r.MATHSPACE.negativethinmathspace],enspace:["Spacer",.5],quad:["Spacer",1],qquad:["Spacer",2],thinspace:["Spacer",r.MATHSPACE.thinmathspace],negthinspace:["Spacer",r.MATHSPACE.negativethinmathspace],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],nonscript:"Nonscript",big:["MakeBig",c.TEXCLASS.ORD,.85],Big:["MakeBig",c.TEXCLASS.ORD,1.15],bigg:["MakeBig",c.TEXCLASS.ORD,1.45],Bigg:["MakeBig",c.TEXCLASS.ORD,1.75],bigl:["MakeBig",c.TEXCLASS.OPEN,.85],Bigl:["MakeBig",c.TEXCLASS.OPEN,1.15],biggl:["MakeBig",c.TEXCLASS.OPEN,1.45],Biggl:["MakeBig",c.TEXCLASS.OPEN,1.75],bigr:["MakeBig",c.TEXCLASS.CLOSE,.85],Bigr:["MakeBig",c.TEXCLASS.CLOSE,1.15],biggr:["MakeBig",c.TEXCLASS.CLOSE,1.45],Biggr:["MakeBig",c.TEXCLASS.CLOSE,1.75],bigm:["MakeBig",c.TEXCLASS.REL,.85],Bigm:["MakeBig",c.TEXCLASS.REL,1.15],biggm:["MakeBig",c.TEXCLASS.REL,1.45],Biggm:["MakeBig",c.TEXCLASS.REL,1.75],mathord:["TeXAtom",c.TEXCLASS.ORD],mathop:["TeXAtom",c.TEXCLASS.OP],mathopen:["TeXAtom",c.TEXCLASS.OPEN],mathclose:["TeXAtom",c.TEXCLASS.CLOSE],mathbin:["TeXAtom",c.TEXCLASS.BIN],mathrel:["TeXAtom",c.TEXCLASS.REL],mathpunct:["TeXAtom",c.TEXCLASS.PUNCT],mathinner:["TeXAtom",c.TEXCLASS.INNER],vcenter:["TeXAtom",c.TEXCLASS.VCENTER],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",boxed:["Macro","\\fbox{$\\displaystyle{#1}$}",1],framebox:"FrameBox",strut:"Strut",mathstrut:["Macro","\\vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute:["Accent","00B4"],grave:["Accent","0060"],ddot:["Accent","00A8"],tilde:["Accent","007E"],bar:["Accent","00AF"],breve:["Accent","02D8"],check:["Accent","02C7"],hat:["Accent","005E"],vec:["Accent","2192"],dot:["Accent","02D9"],widetilde:["Accent","007E",1],widehat:["Accent","005E",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em",null,!0],eqalign:["Matrix",null,null,"right left",(0,r.em)(r.MATHSPACE.thickmathspace),".5em","D"],displaylines:["Matrix",null,null,"center",null,".5em","D"],cr:"Cr","\\":"CrLaTeX",newline:["CrLaTeX",!0],hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno:["Matrix",null,null,"right left",(0,r.em)(r.MATHSPACE.thickmathspace),".5em","D",null,"right"],leqalignno:["Matrix",null,null,"right left",(0,r.em)(r.MATHSPACE.thickmathspace),".5em","D",null,"left"],hfill:"HFill",hfil:"HFill",hfilll:"HFill",bmod:["Macro",'\\mmlToken{mo}[lspace="thickmathspace" rspace="thickmathspace"]{mod}'],pmod:["Macro","\\pod{\\mmlToken{mi}{mod}\\kern 6mu #1}",1],mod:["Macro","\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}\\mmlToken{mi}{mod}\\,\\,#1",1],pod:["Macro","\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)",1],iff:["Macro","\\;\\Longleftrightarrow\\;"],skew:["Macro","{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}",3],pmb:["Macro","\\rlap{#1}\\kern1px{#1}",1],TeX:["Macro","T\\kern-.14em\\lower.5ex{E}\\kern-.115em X"],LaTeX:["Macro","L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX"]," ":["Macro","\\text{ }"],not:"Not",dots:"Dots",space:"Tilde"," ":"Tilde",begin:"BeginEnd",end:"BeginEnd",label:"HandleLabel",ref:"HandleRef",nonumber:"HandleNoTag",mathchoice:"MathChoice",mmlToken:"MmlToken"},s.default),new e.EnvironmentMap("environment",l.default.environment,{array:["AlignedArray"],equation:["Equation",null,!0],eqnarray:["EqnArray",null,!0,!0,"rcl",a.default.cols(0,r.MATHSPACE.thickmathspace),".5em"]},s.default),new e.CharacterMap("not_remap",null,{"←":"↚","→":"↛","↔":"↮","⇐":"⇍","⇒":"⇏","⇔":"⇎","∈":"∉","∋":"∌","∣":"∤","∥":"∦","∼":"≁","~":"≁","≃":"≄","≅":"≇","≈":"≉","≍":"≭","=":"≠","≡":"≢","<":"≮",">":"≯","≤":"≰","≥":"≱","≲":"≴","≳":"≵","≶":"≸","≷":"≹","≺":"⊀","≻":"⊁","⊂":"⊄","⊃":"⊅","⊆":"⊈","⊇":"⊉","⊢":"⊬","⊨":"⊭","⊩":"⊮","⊫":"⊯","≼":"⋠","≽":"⋡","⊑":"⋢","⊒":"⋣","⊲":"⋪","⊳":"⋫","⊴":"⋬","⊵":"⋭","∃":"∄"})},7693:function(t,e,r){var i=this&&this.__assign||function(){return(i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},o=(Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigMacrosConfiguration=void 0,r(9899)),i=r(7233),a=r(9140),s=n(r(5450)),S=r(8803),O=n(r(1110)),n=r(6793),M="configmacros-map",x="configmacros-env-map";e.ConfigMacrosConfiguration=o.Configuration.create("configmacros",{init:function(t){new a.CommandMap(M,{},{}),new a.EnvironmentMap(x,s.default.environment,{},{}),t.append(o.Configuration.local({handler:{macro:[M],environment:[x]},priority:3}))},config:function(t,e){var r,n,o=e,i=o.parseOptions.handlers.retrieve(M),a=o.parseOptions.options.macros;try{for(var s=_(Object.keys(a)),l=s.next();!l.done;l=s.next()){var c=l.value,u="string"==typeof a[c]?[a[c]]:a[c],p=Array.isArray(u[2])?new S.Macro(c,O.default.MacroWithTemplate,u.slice(0,2).concat(u[2])):new S.Macro(c,O.default.Macro,u);i.add(c,p)}}catch(o){r={error:o}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}var h,d,f=e,m=f.parseOptions.handlers.retrieve(x),y=f.parseOptions.options.environments;try{for(var g=_(Object.keys(y)),b=g.next();!b.done;b=g.next()){var v=b.value;m.add(v,new S.Macro(v,O.default.BeginEnv,[!0].concat(y[v])))}}catch(f){h={error:f}}finally{try{b&&!b.done&&(d=g.return)&&d.call(g)}finally{if(h)throw h.error}}},items:((r={})[n.BeginEnvItem.prototype.kind]=n.BeginEnvItem,r),options:{macros:(0,i.expandable)({}),environments:(0,i.expandable)({})}})},1496:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){t[n=void 0===n?r:n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.NewcommandConfiguration=void 0,r(9899)),l=r(6793),c=a(r(5579)),u=(r(5117),a(r(5450))),p=i(r(9140));e.NewcommandConfiguration=s.Configuration.create("newcommand",{handler:{macro:["Newcommand-macros"]},items:((a={})[l.BeginEnvItem.prototype.kind]=l.BeginEnvItem,a),options:{maxMacros:1e3},init:function(t){new p.DelimiterMap(c.default.NEW_DELIMITER,u.default.delimiter,{}),new p.CommandMap(c.default.NEW_COMMAND,{},{}),new p.EnvironmentMap(c.default.NEW_ENVIRONMENT,u.default.environment,{},{}),t.append(s.Configuration.local({handler:{character:[],delimiter:[c.default.NEW_DELIMITER],macro:[c.default.NEW_DELIMITER,c.default.NEW_COMMAND],environment:[c.default.NEW_ENVIRONMENT]},priority:-1}))}})},6793:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.BeginEnvItem=void 0,a(r(3971))),a=(o=r(8292).BaseItem,i(l,o),Object.defineProperty(l.prototype,"kind",{get:function(){return"beginEnv"},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,"isOpen",{get:function(){return!0},enumerable:!1,configurable:!0}),l.prototype.checkItem=function(t){if(t.isKind("end")){if(t.getName()!==this.getName())throw new s.default("EnvBadEnd","\\begin{%1} ended with \\end{%2}",this.getName(),t.getName());return[[this.factory.create("mml",this.toMml())],!0]}if(t.isKind("stop"))throw new s.default("EnvMissingEnd","Missing \\end{%1}",this.getName());return o.prototype.checkItem.call(this,t)},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.BeginEnvItem=a},5117:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},e=(Object.defineProperty(e,"__esModule",{value:!0}),n(r(1110)));new(r(9140).CommandMap)("Newcommand-macros",{newcommand:"NewCommand",renewcommand:"NewCommand",newenvironment:"NewEnvironment",renewenvironment:"NewEnvironment",def:"MacroDef",let:"Let"},e.default)},1110:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){t[n=void 0===n?r:n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},c=(Object.defineProperty(e,"__esModule",{value:!0}),a(r(3971))),s=i(r(9140)),i=a(r(7693)),u=a(r(1130)),p=a(r(5579)),l={NewCommand:function(t,e){var r=p.default.GetCsNameArgument(t,e),n=p.default.GetArgCount(t,e),o=t.GetBrackets(e),e=t.GetArgument(e);p.default.addMacro(t,r,l.Macro,[e,n,o])},NewEnvironment:function(t,e){var r=u.default.trimSpaces(t.GetArgument(e)),n=p.default.GetArgCount(t,e),o=t.GetBrackets(e),i=t.GetArgument(e),e=t.GetArgument(e);p.default.addEnvironment(t,r,l.BeginEnv,[!0,i,e,n,o])},MacroDef:function(t,e){var r=p.default.GetCSname(t,e),n=p.default.GetTemplate(t,e,"\\"+r),e=t.GetArgument(e);n instanceof Array?p.default.addMacro(t,r,l.MacroWithTemplate,[e].concat(n)):p.default.addMacro(t,r,l.Macro,[e,n])},Let:function(t,e){var r=p.default.GetCSname(t,e),n=t.GetNext(),o=("="===n&&(t.i++,n=t.GetNext()),t.configuration.handlers);if("\\"!==n){t.i++;var i=o.get("delimiter").lookup(n);i?p.default.addDelimiter(t,"\\"+r,i.char,i.attributes):p.default.addMacro(t,r,l.Macro,[n])}else if(e=p.default.GetCSname(t,e),i=o.get("delimiter").lookup("\\"+e))p.default.addDelimiter(t,"\\"+r,i.char,i.attributes);else{var a=o.get("macro").applicable(e);if(a){if(a instanceof s.MacroMap)return n=a.lookup(e),void p.default.addMacro(t,r,n.func,n.args,n.symbol);i=a.lookup(e),o=p.default.disassembleSymbol(r,i);p.default.addMacro(t,r,function(t,e){for(var r=[],n=2;n=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},r=(Object.defineProperty(e,"__esModule",{value:!0}),e.NoUndefinedConfiguration=void 0,r(9899));e.NoUndefinedConfiguration=r.Configuration.create("noundefined",{fallback:{macro:function(t,e){var r,n,e=t.create("text","\\"+e),o=t.options.noundefined||{},i={};try{for(var a=c(["color","background","size"]),s=a.next();!s.done;s=a.next()){var l=s.value;o[l]&&(i["math"+l]=o[l])}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}t.Push(t.create("node","mtext",[],i,e))}},options:{noundefined:{color:"red",background:"",size:""}},priority:3})},7741:function(t,e,r){var h=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},p=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTML=void 0,r(3055)),h=r(4139),d=r(9261),f=r(6797),m=r(2760),y=c(r(6010)),g=r(505),c=(s=p.CommonOutputJax,o(b,s),b.prototype.escaped=function(t,e){return this.setDocument(e),this.html("span",{},[this.text(t.math)])},b.prototype.styleSheet=function(t){if(this.chtmlStyles)return this.options.adaptiveCSS&&(e=new h.CssStyles,this.addWrapperStyles(e),this.updateFontStyles(e),this.adaptor.insertRules(this.chtmlStyles,e.getStyleRules())),this.chtmlStyles;var e=this.chtmlStyles=s.prototype.styleSheet.call(this,t);return this.adaptor.setAttribute(e,"id",b.STYLESHEETID),this.wrapperUsage.update(),e},b.prototype.updateFontStyles=function(t){t.addStyles(this.font.updateStyles({}))},b.prototype.addWrapperStyles=function(t){var e,r;if(this.options.adaptiveCSS)try{for(var n=u(this.wrapperUsage.update()),o=n.next();!o.done;o=n.next()){var i=o.value,a=this.factory.getNodeClass(i);a&&this.addClassStyles(a,t)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}else s.prototype.addWrapperStyles.call(this,t)},b.prototype.addClassStyles=function(t,e){var r,n=t;n.autoStyle&&"unknown"!==n.kind&&e.addStyles(((r={})["mjx-"+n.kind]={display:"inline-block","text-align":"left"},r)),this.wrapperUsage.add(n.kind),s.prototype.addClassStyles.call(this,t,e)},b.prototype.processMath=function(t,e){this.factory.wrap(t).toCHTML(e)},b.prototype.clearCache=function(){this.cssStyles.clear(),this.font.clearCache(),this.wrapperUsage.clear(),this.chtmlStyles=null},b.prototype.reset=function(){this.clearCache()},b.prototype.unknownText=function(t,e,r){void 0===r&&(r=null);var n={},o=100/this.math.metrics.scale;return 100!=o&&(n["font-size"]=this.fixed(o,1)+"%",n.padding=y.em(75/o)+" 0 "+y.em(20/o)+" 0"),"-explicitFont"!==e&&(1!==(o=(0,g.unicodeChars)(t)).length||o[0]<119808||120831 *":{display:"table-cell"},"mjx-mtext":{display:"inline-block"},"mjx-mstyle":{display:"inline-block"},"mjx-merror":{display:"inline-block",color:"red","background-color":"yellow"},"mjx-mphantom":{visibility:"hidden"},"_::-webkit-full-page-media, _:future, :root mjx-container":{"will-change":"opacity"}},b.STYLESHEETID="MJX-CHTML-styles",b);function b(t){t=s.call(this,t=void 0===t?null:t,d.CHTMLWrapperFactory,m.TeXFont)||this;return t.chtmlStyles=null,t.font.adaptiveCSS(t.options.adaptiveCSS),t.wrapperUsage=new f.Usage,t}e.CHTML=c},8042:function(t,e,r){var n,c,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),u=this&&this.__assign||function(){return(u=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},d=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-mid"]={"margin-top":this.em(-r/2),"margin-bottom":this.em(-r/2)}),o&&(a["border-top-width"]=this.em0(o-.03)),i&&(a["border-bottom-width"]=this.em0(i-.03),t["mjx-stretchy-v"+e+" > mjx-end"]={"margin-top":this.em(-i)}),Object.keys(a).length&&(t["mjx-stretchy-v"+e+" > mjx-ext"]=a)},h.prototype.addDelimiterVPart=function(t,e,r,n,o){if(!n)return 0;var i=this.getDelimiterData(n),a=(o[2]-i[2])/2,n={content:this.charContent(n)};return"ext"!==r?n.padding=this.padding(i,a):(n.width=this.em0(o[2]),a&&(n["padding-left"]=this.em0(a))),t["mjx-stretchy-v"+e+" mjx-"+r+" mjx-c::before"]=n,i[0]+i[1]},h.prototype.addDelimiterHStyles=function(t,e,r){var n=d(r.stretch,4),o=n[0],i=n[1],a=n[2],n=n[3],r=r.HDW;this.addDelimiterHPart(t,e,"beg",o,r),this.addDelimiterHPart(t,e,"ext",i,r),this.addDelimiterHPart(t,e,"end",a,r),n&&(this.addDelimiterHPart(t,e,"mid",n,r),t["mjx-stretchy-h"+e+" > mjx-ext"]={width:"50%"})},h.prototype.addDelimiterHPart=function(t,e,r,n,o){var i;n&&((i={content:(i=this.getDelimiterData(n)[3])&&i.c?'"'+i.c+'"':this.charContent(n)}).padding=this.padding(o,0,-o[2]),t["mjx-stretchy-h"+e+" mjx-"+r+" mjx-c::before"]=i)},h.prototype.addCharStyles=function(t,e,r,n){var o=n[3],e=void 0!==o.f?o.f:e;t["mjx-c"+this.charSelector(r)+(e?".TEX-"+e:"")+"::before"]={padding:this.padding(n,0,o.ic||0),content:null!=o.c?'"'+o.c+'"':this.charContent(r)}},h.prototype.getDelimiterData=function(t){return this.getChar("-smallop",t)},h.prototype.em=function(t){return(0,p.em)(t)},h.prototype.em0=function(t){return(0,p.em)(Math.max(0,t))},h.prototype.padding=function(t,e,r){var t=d(t,3),n=t[0],o=t[1];return[n,t[2]+(r=void 0===r?0:r),o,e=void 0===e?0:e].map(this.em0).join(" ")},h.prototype.charContent=function(t){return'"'+(32<=t&&t<=126&&34!==t&&39!==t&&92!==t?String.fromCharCode(t):"\\"+t.toString(16).toUpperCase())+'"'},h.prototype.charSelector=function(t){return".mjx-c"+t.toString(16).toUpperCase()},h.OPTIONS=u(u({},l.FontData.OPTIONS),{fontURL:"js/output/chtml/fonts/tex-woff-v2"}),h.JAX="CHTML",h.defaultVariantClasses={},h.defaultVariantLetters={},h.defaultStyles={"mjx-c::before":{display:"block",width:0}},h.defaultFonts={"@font-face /* 0 */":{"font-family":"MJXZERO",src:'url("%%URL%%/MathJax_Zero.woff") format("woff")'}},h);function h(){var t=null!==c&&c.apply(this,arguments)||this;return t.charUsage=new s.Usage,t.delimUsage=new s.Usage,t}e.CHTMLFontData=a,e.AddCSS=function(t,e){var r,n;try{for(var o=v(Object.keys(e)),i=o.next();!i.done;i=o.next()){var a=i.value,s=parseInt(a);Object.assign(l.FontData.charOptions(t,s),e[s])}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return t}},8270:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){t[n=void 0===n?r:n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},p=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLTextNode=void 0,r(9007)),s=r(5355),r=(o=(0,r(1160).CommonTextNodeMixin)(s.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){this.markUsed();var e,r,n=this.adaptor,o=this.parent.variant,i=this.node.getText();if(0!==i.length)if("-explicitFont"===o)n.append(t,this.jax.unknownText(i,o,this.getBBox().w));else{i=this.remappedText(i,o);try{for(var a=h(i),s=a.next();!s.done;s=a.next()){var l=s.value,c=this.getVariantChar(o,l)[3],u=c.f?" TEX-"+c.f:"",p=c.unknown?this.jax.unknownText(String.fromCodePoint(l),o):this.html("mjx-c",{class:this.char(l)+u});n.append(t,p),c.unknown||this.font.charUsage.add([o,l])}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}}},l.kind=a.TextNode.prototype.kind,l.autoStyle=!1,l.styles={"mjx-c":{display:"inline-block"},"mjx-utext":{display:"inline-block",padding:".75em 0 .2em 0"}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLTextNode=r},8102:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmaction=void 0,r(5355)),s=r(1956),l=r(1956),r=r(9145),s=(o=(0,s.CommonMactionMixin)(a.CHTMLWrapper),i(c,o),c.prototype.toCHTML=function(t){t=this.standardCHTMLnode(t);this.selected.toCHTML(t),this.action(this,this.data)},c.prototype.setEventHandler=function(t,e){this.chtml.addEventListener(t,e)},c.kind=r.MmlMaction.prototype.kind,c.styles={"mjx-maction":{position:"relative"},"mjx-maction > mjx-tool":{display:"none",position:"absolute",bottom:0,right:0,width:0,height:0,"z-index":500},"mjx-tool > mjx-tip":{display:"inline-block",padding:".2em",border:"1px solid #888","font-size":"70%","background-color":"#F8F8F8",color:"black","box-shadow":"2px 2px 5px #AAAAAA"},"mjx-maction[toggle]":{cursor:"pointer"},"mjx-status":{display:"block",position:"fixed",left:"1em",bottom:"1em","min-width":"25%",padding:".2em .4em",border:"1px solid #888","font-size":"90%","background-color":"#F8F8F8",color:"black"}},c.actions=new Map([["toggle",[function(t,e){t.adaptor.setAttribute(t.chtml,"toggle",t.node.attributes.get("selection"));var r=t.factory.jax.math,n=t.factory.jax.document,o=t.node;t.setEventHandler("click",function(t){r.end.node||(r.start.node=r.end.node=r.typesetRoot,r.start.n=r.end.n=0),o.nextToggleSelection(),r.rerender(n),t.stopPropagation()})},{}]],["tooltip",[function(r,n){var t,o,i,e=r.childNodes[1];e&&(e.node.isKind("mtext")?(t=e.node.getText(),r.adaptor.setAttribute(r.chtml,"title",t)):(o=r.adaptor,i=o.append(r.chtml,r.html("mjx-tool",{style:{bottom:r.em(-r.dy),right:r.em(-r.dx)}},[r.html("mjx-tip")])),e.toCHTML(o.firstChild(i)),r.setEventHandler("mouseover",function(t){n.stopTimers(r,n);var e=setTimeout(function(){return o.setStyle(i,"display","block")},n.postDelay);n.hoverTimer.set(r,e),t.stopPropagation()}),r.setEventHandler("mouseout",function(t){n.stopTimers(r,n);var e=setTimeout(function(){return o.setStyle(i,"display","")},n.clearDelay);n.clearTimer.set(r,e),t.stopPropagation()})))},l.TooltipData]],["statusline",[function(r,n){var o,i,t=r.childNodes[1];t&&t.node.isKind("mtext")&&(o=r.adaptor,i=t.node.getText(),o.setAttribute(r.chtml,"statusline",i),r.setEventHandler("mouseover",function(t){var e;null===n.status&&(e=o.body(o.document),n.status=o.append(e,r.html("mjx-status",{},[r.text(i)]))),t.stopPropagation()}),r.setEventHandler("mouseout",function(t){n.status&&(o.remove(n.status),n.status=null),t.stopPropagation()}))},{status:null}]]]),c);function c(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmaction=s},804:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},h=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-dstrike":{display:"inline-block",left:0,top:0,position:"absolute","border-top":b.SOLID,"transform-origin":"top left"},"mjx-menclose > mjx-ustrike":{display:"inline-block",left:0,bottom:0,position:"absolute","border-top":b.SOLID,"transform-origin":"bottom left"},"mjx-menclose > mjx-hstrike":{"border-top":b.SOLID,position:"absolute",left:0,right:0,bottom:"50%",transform:"translateY("+(0,r.em)(b.THICKNESS/2)+")"},"mjx-menclose > mjx-vstrike":{"border-left":b.SOLID,position:"absolute",top:0,bottom:0,right:"50%",transform:"translateX("+(0,r.em)(b.THICKNESS/2)+")"},"mjx-menclose > mjx-rbox":{position:"absolute",top:0,bottom:0,right:0,left:0,border:b.SOLID,"border-radius":(0,r.em)(b.THICKNESS+b.PADDING)},"mjx-menclose > mjx-cbox":{position:"absolute",top:0,bottom:0,right:0,left:0,border:b.SOLID,"border-radius":"50%"},"mjx-menclose > mjx-arrow":{position:"absolute",left:0,bottom:"50%",height:0,width:0},"mjx-menclose > mjx-arrow > *":{display:"block",position:"absolute","transform-origin":"bottom","border-left":(0,r.em)(b.THICKNESS*b.ARROWX)+" solid","border-right":0,"box-sizing":"border-box"},"mjx-menclose > mjx-arrow > mjx-aline":{left:0,top:(0,r.em)(-b.THICKNESS/2),right:(0,r.em)(b.THICKNESS*(b.ARROWX-1)),height:0,"border-top":(0,r.em)(b.THICKNESS)+" solid","border-left":0},"mjx-menclose > mjx-arrow[double] > mjx-aline":{left:(0,r.em)(b.THICKNESS*(b.ARROWX-1)),height:0},"mjx-menclose > mjx-arrow > mjx-rthead":{transform:"skewX("+p+"rad)",right:0,bottom:"-1px","border-bottom":"1px solid transparent","border-top":(0,r.em)(b.THICKNESS*b.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-rbhead":{transform:"skewX(-"+p+"rad)","transform-origin":"top",right:0,top:"-1px","border-top":"1px solid transparent","border-bottom":(0,r.em)(b.THICKNESS*b.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-lthead":{transform:"skewX(-"+p+"rad)",left:0,bottom:"-1px","border-left":0,"border-right":(0,r.em)(b.THICKNESS*b.ARROWX)+" solid","border-bottom":"1px solid transparent","border-top":(0,r.em)(b.THICKNESS*b.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-lbhead":{transform:"skewX("+p+"rad)","transform-origin":"top",left:0,top:"-1px","border-left":0,"border-right":(0,r.em)(b.THICKNESS*b.ARROWX)+" solid","border-top":"1px solid transparent","border-bottom":(0,r.em)(b.THICKNESS*b.ARROWY)+" solid transparent"},"mjx-menclose > dbox":{position:"absolute",top:0,bottom:0,left:(0,r.em)(-1.5*b.PADDING),width:(0,r.em)(3*b.PADDING),border:(0,r.em)(b.THICKNESS)+" solid","border-radius":"50%","clip-path":"inset(0 0 0 "+(0,r.em)(1.5*b.PADDING)+")","box-sizing":"border-box"}},f.notations=new Map([b.Border("top"),b.Border("right"),b.Border("bottom"),b.Border("left"),b.Border2("actuarial","top","right"),b.Border2("madruwb","bottom","right"),b.DiagonalStrike("up",1),b.DiagonalStrike("down",-1),["horizontalstrike",{renderer:b.RenderElement("hstrike","Y"),bbox:function(t){return[0,t.padding,0,t.padding]}}],["verticalstrike",{renderer:b.RenderElement("vstrike","X"),bbox:function(t){return[t.padding,0,t.padding,0]}}],["box",{renderer:function(t,e){t.adaptor.setStyle(e,"border",t.em(t.thickness)+" solid")},bbox:b.fullBBox,border:b.fullBorder,remove:"left right top bottom"}],["roundedbox",{renderer:b.RenderElement("rbox"),bbox:b.fullBBox}],["circle",{renderer:b.RenderElement("cbox"),bbox:b.fullBBox}],["phasorangle",{renderer:function(t,e){var r=t.getBBox(),n=r.h,r=r.d,n=h(t.getArgMod(1.75*t.padding,n+r),2),r=n[0],n=n[1],o=t.thickness*Math.sin(r)*.9,e=(t.adaptor.setStyle(e,"border-bottom",t.em(t.thickness)+" solid"),t.adjustBorder(t.html("mjx-ustrike",{style:{width:t.em(n),transform:"translateX("+t.em(o)+") rotate("+t.fixed(-r)+"rad)"}})));t.adaptor.append(t.chtml,e)},bbox:function(t){var e=t.padding/2,t=t.thickness;return[2*e,e,e+t,3*e+t]},border:function(t){return[0,0,t.thickness,0]},remove:"bottom"}],b.Arrow("up"),b.Arrow("down"),b.Arrow("left"),b.Arrow("right"),b.Arrow("updown"),b.Arrow("leftright"),b.DiagonalArrow("updiagonal"),b.DiagonalArrow("northeast"),b.DiagonalArrow("southeast"),b.DiagonalArrow("northwest"),b.DiagonalArrow("southwest"),b.DiagonalArrow("northeastsouthwest"),b.DiagonalArrow("northwestsoutheast"),["longdiv",{renderer:function(t,e){var r=t.adaptor,e=(r.setStyle(e,"border-top",t.em(t.thickness)+" solid"),r.append(t.chtml,t.html("dbox"))),n=t.thickness,o=t.padding;n!==b.THICKNESS&&r.setStyle(e,"border-width",t.em(n)),o!==b.PADDING&&(r.setStyle(e,"left",t.em(-1.5*o)),r.setStyle(e,"width",t.em(3*o)),r.setStyle(e,"clip-path","inset(0 0 0 "+t.em(1.5*o)+")"))},bbox:function(t){var e=t.padding,t=t.thickness;return[e+t,e,e,2*e+t/2]}}],["radical",{renderer:function(e,t){e.msqrt.toCHTML(t);t=e.sqrtTRBL();e.adaptor.setStyle(e.msqrt.chtml,"margin",t.map(function(t){return e.em(-t)}).join(" "))},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),f);function f(){return null!==u&&u.apply(this,arguments)||this}e.CHTMLmenclose=c},2275:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmfenced=void 0,r(5355)),s=r(7555),r=r(5410),s=(o=(0,s.CommonMfencedMixin)(a.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){t=this.standardCHTMLnode(t);this.mrow.toCHTML(t)},l.kind=r.MmlMfenced.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmfenced=s},9063:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),d=this&&this.__assign||function(){return(d=Object.assign||function(t){for(var e,r=1,n=arguments.length;r *":{"font-size":"2000%"},"mjx-dbox":{display:"block","font-size":"5%"},"mjx-num":{display:"block","text-align":"center"},"mjx-den":{display:"block","text-align":"center"},"mjx-mfrac[bevelled] > mjx-num":{display:"inline-block"},"mjx-mfrac[bevelled] > mjx-den":{display:"inline-block"},'mjx-den[align="right"], mjx-num[align="right"]':{"text-align":"right"},'mjx-den[align="left"], mjx-num[align="left"]':{"text-align":"left"},"mjx-nstrut":{display:"inline-block",height:".054em",width:0,"vertical-align":"-.054em"},'mjx-nstrut[type="d"]':{height:".217em","vertical-align":"-.217em"},"mjx-dstrut":{display:"inline-block",height:".505em",width:0},'mjx-dstrut[type="d"]':{height:".726em"},"mjx-line":{display:"block","box-sizing":"border-box","min-height":"1px",height:".06em","border-top":".06em solid",margin:".06em -.1em",overflow:"hidden"},'mjx-line[type="d"]':{margin:".18em -.1em"}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmfrac=s},6911:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmglyph=void 0,r(5355)),s=r(5636),r=r(3985),s=(o=(0,s.CommonMglyphMixin)(a.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){var e,r,n,t=this.standardCHTMLnode(t);this.charWrapper?this.charWrapper.toCHTML(t):(n=(e=this.node.attributes.getList("src","alt")).src,e=e.alt,r={width:this.em(this.width),height:this.em(this.height)},this.valign&&(r.verticalAlign=this.em(this.valign)),n=this.html("img",{src:n,style:r,alt:e,title:e}),this.adaptor.append(t,n))},l.kind=r.MmlMglyph.prototype.kind,l.styles={"mjx-mglyph > img":{display:"inline-block",border:0,padding:0}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmglyph=s},1653:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmi=void 0,r(5355)),s=r(5723),r=r(450),s=(o=(0,s.CommonMiMixin)(a.CHTMLWrapper),i(l,o),l.kind=r.MmlMi.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmi=s},6781:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-row > mjx-cell":{"text-align":"right"},'[script-align="left"] > mjx-row > mjx-cell':{"text-align":"left"},'[script-align="center"] > mjx-row > mjx-cell':{"text-align":"center"},'[script-align="right"] > mjx-row > mjx-cell':{"text-align":"right"}},p);function p(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmmultiscripts=r},6460:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmn=void 0,r(5355)),s=r(5023),r=r(3050),s=(o=(0,s.CommonMnMixin)(a.CHTMLWrapper),i(l,o),l.kind=r.MmlMn.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmn=s},6287:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmo=void 0,r(5355)),l=r(7096),r=r(2756),a=(o=(0,l.CommonMoMixin)(a.CHTMLWrapper),i(s,o),s.prototype.toCHTML=function(t){var e,r,n=this.node.attributes,o=n.get("symmetric")&&2!==this.stretch.dir,i=0!==this.stretch.dir,a=(i&&null===this.size&&this.getStretchedVariant([]),this.standardCHTMLnode(t));if(i&&this.size<0)this.stretchHTML(a);else{!o&&!n.get("largeop")||"0"!==(i=this.em(this.getCenterOffset()))&&this.adaptor.setStyle(a,"verticalAlign",i),this.node.getProperty("mathaccent")&&(this.adaptor.setStyle(a,"width","0"),this.adaptor.setStyle(a,"margin-left",this.em(this.getAccentOffset())));try{for(var s=c(this.childNodes),l=s.next();!l.done;l=s.next())l.value.toCHTML(a)}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}}},s.prototype.stretchHTML=function(t){var e=this.getText().codePointAt(0),r=(this.font.delimUsage.add(e),this.childNodes[0].markUsed(),this.stretch),n=r.stretch,o=[],n=(n[0]&&o.push(this.html("mjx-beg",{},[this.html("mjx-c")])),o.push(this.html("mjx-ext",{},[this.html("mjx-c")])),4===n.length&&o.push(this.html("mjx-mid",{},[this.html("mjx-c")]),this.html("mjx-ext",{},[this.html("mjx-c")])),n[2]&&o.push(this.html("mjx-end",{},[this.html("mjx-c")])),{}),i=this.bbox,a=i.h,s=i.d,i=i.w,a=(1===r.dir?(o.push(this.html("mjx-mark")),n.height=this.em(a+s),n.verticalAlign=this.em(-s)):n.width=this.em(i),l.DirectionVH[r.dir]),s={class:this.char(r.c||e),style:n},i=this.html("mjx-stretchy-"+a,s,o);this.adaptor.append(t,i)},s.kind=r.MmlMo.prototype.kind,s.styles={"mjx-stretchy-h":{display:"inline-table",width:"100%"},"mjx-stretchy-h > *":{display:"table-cell",width:0},"mjx-stretchy-h > * > mjx-c":{display:"inline-block",transform:"scalex(1.0000001)"},"mjx-stretchy-h > * > mjx-c::before":{display:"inline-block",width:"initial"},"mjx-stretchy-h > mjx-ext":{"/* IE */ overflow":"hidden","/* others */ overflow":"clip visible",width:"100%"},"mjx-stretchy-h > mjx-ext > mjx-c::before":{transform:"scalex(500)"},"mjx-stretchy-h > mjx-ext > mjx-c":{width:0},"mjx-stretchy-h > mjx-beg > mjx-c":{"margin-right":"-.1em"},"mjx-stretchy-h > mjx-end > mjx-c":{"margin-left":"-.1em"},"mjx-stretchy-v":{display:"inline-block"},"mjx-stretchy-v > *":{display:"block"},"mjx-stretchy-v > mjx-beg":{height:0},"mjx-stretchy-v > mjx-end > mjx-c":{display:"block"},"mjx-stretchy-v > * > mjx-c":{transform:"scaley(1.0000001)","transform-origin":"left center",overflow:"hidden"},"mjx-stretchy-v > mjx-ext":{display:"block",height:"100%","box-sizing":"border-box",border:"0px solid transparent","/* IE */ overflow":"hidden","/* others */ overflow":"visible clip"},"mjx-stretchy-v > mjx-ext > mjx-c::before":{width:"initial","box-sizing":"border-box"},"mjx-stretchy-v > mjx-ext > mjx-c":{transform:"scaleY(500) translateY(.075em)",overflow:"visible"},"mjx-mark":{display:"inline-block",height:"0px"}},s);function s(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmo=a},5964:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),m=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmpadded=void 0,r(5355)),s=r(6898),r=r(7238),s=(o=(0,s.CommonMpaddedMixin)(a.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t),o=[],i={},a=m(this.getDimens(),9),s=a[2],l=a[3],c=a[4],u=a[5],p=a[6],h=a[7],a=a[8];u&&(i.width=this.em(s+u)),(l||c)&&(i.margin=this.em(l)+" 0 "+this.em(c)),(p+a||h)&&(i.position="relative",s=this.html("mjx-rbox",{style:{left:this.em(p+a),top:this.em(-h),"max-width":i.width}}),p+a&&this.childNodes[0].getBBox().pwidth&&(this.adaptor.setAttribute(s,"width","full"),this.adaptor.setStyle(s,"left",this.em(p))),o.push(s)),n=this.adaptor.append(n,this.html("mjx-block",{style:i},o));try{for(var d=y(this.childNodes),f=d.next();!f.done;f=d.next())f.value.toCHTML(o[0]||n)}catch(t){e={error:t}}finally{try{f&&!f.done&&(r=d.return)&&r.call(d)}finally{if(e)throw e.error}}},l.kind=r.MmlMpadded.prototype.kind,l.styles={"mjx-mpadded":{display:"inline-block"},"mjx-rbox":{display:"inline-block",position:"relative"}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmpadded=s},8776:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLinferredMrow=e.CHTMLmrow=void 0,r(5355)),s=r(8411),c=r(8411),r=r(9878),s=(o=(0,s.CommonMrowMixin)(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){var e,r,n=this.node.isInferred?this.chtml=t:this.standardCHTMLnode(t),o=!1;try{for(var i=l(this.childNodes),a=i.next();!a.done;a=i.next()){var s=a.value;s.toCHTML(n),s.bbox.w<0&&(o=!0)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}o&&(r=this.getBBox().w)&&(this.adaptor.setStyle(n,"width",this.em(Math.max(0,r))),r<0&&this.adaptor.setStyle(n,"marginRight",this.em(r)))},u.kind=r.MmlMrow.prototype.kind,u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmrow=s;p=(0,c.CommonInferredMrowMixin)(s),i(h,p),h.kind=r.MmlInferredMrow.prototype.kind;var p,a=h;function h(){return null!==p&&p.apply(this,arguments)||this}e.CHTMLinferredMrow=a},4597:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLms=void 0,r(5355)),s=r(4126),r=r(7265),s=(o=(0,s.CommonMsMixin)(a.CHTMLWrapper),i(l,o),l.kind=r.MmlMs.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLms=s},2970:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmspace=void 0,r(5355)),s=r(258),r=r(6030),s=(o=(0,s.CommonMspaceMixin)(a.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){var t=this.standardCHTMLnode(t),e=this.getBBox(),r=e.w,n=e.h,e=e.d;r<0&&(this.adaptor.setStyle(t,"marginRight",this.em(r)),r=0),r&&this.adaptor.setStyle(t,"width",this.em(r)),(n=Math.max(0,n+e))&&this.adaptor.setStyle(t,"height",this.em(Math.max(0,n))),e&&this.adaptor.setStyle(t,"verticalAlign",this.em(-e))},l.kind=r.MmlMspace.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmspace=s},5610:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-box":{"border-top":".07em solid"},"mjx-sqrt.mjx-tall > mjx-box":{"padding-left":".3em","margin-left":"-.3em"}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmsqrt=s},4300:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-spacer":{display:"block"}};var f,c=m;function m(){return null!==f&&f.apply(this,arguments)||this}e.CHTMLmsubsup=c},8002:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),g=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return{value:(t=t&&n>=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0 mjx-itable":{"vertical-align":"middle","text-align":"left","box-sizing":"border-box"},"mjx-labels > mjx-itable":{position:"absolute",top:0},'mjx-mtable[justify="left"]':{"text-align":"left"},'mjx-mtable[justify="right"]':{"text-align":"right"},'mjx-mtable[justify="left"][side="left"]':{"padding-right":"0 ! important"},'mjx-mtable[justify="left"][side="right"]':{"padding-left":"0 ! important"},'mjx-mtable[justify="right"][side="left"]':{"padding-right":"0 ! important"},'mjx-mtable[justify="right"][side="right"]':{"padding-left":"0 ! important"},"mjx-mtable[align]":{"vertical-align":"baseline"},'mjx-mtable[align="top"] > mjx-table':{"vertical-align":"top"},'mjx-mtable[align="bottom"] > mjx-table':{"vertical-align":"bottom"},'mjx-mtable[side="right"] mjx-labels':{"min-width":"100%"}},p);function p(t,e,r){t=o.call(this,t,e,r=void 0===r?null:r)||this;return t.itable=t.html("mjx-itable"),t.labels=t.html("mjx-itable"),t}e.CHTMLmtable=r},7056:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmtd=void 0,r(5355)),s=r(5164),r=r(4359),s=(o=(0,s.CommonMtdMixin)(a.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){o.prototype.toCHTML.call(this,t);var t=this.node.attributes.get("rowalign"),e=this.node.attributes.get("columnalign");t!==this.parent.node.attributes.get("rowalign")&&this.adaptor.setAttribute(this.chtml,"rowalign",t),"center"===e||"mlabeledtr"===this.parent.kind&&this===this.parent.childNodes[0]&&e===this.parent.parent.node.attributes.get("side")||this.adaptor.setStyle(this.chtml,"textAlign",e),this.parent.parent.node.getProperty("useHeight")&&this.adaptor.append(this.chtml,this.html("mjx-tstrut"))},l.kind=r.MmlMtd.prototype.kind,l.styles={"mjx-mtd":{display:"table-cell","text-align":"center",padding:".215em .4em"},"mjx-mtd:first-child":{"padding-left":0},"mjx-mtd:last-child":{"padding-right":0},"mjx-mtable > * > mjx-itable > *:first-child > mjx-mtd":{"padding-top":0},"mjx-mtable > * > mjx-itable > *:last-child > mjx-mtd":{"padding-bottom":0},"mjx-tstrut":{display:"inline-block",height:"1em","vertical-align":"-.25em"},'mjx-labels[align="left"] > mjx-mtr > mjx-mtd':{"text-align":"left"},'mjx-labels[align="right"] > mjx-mtr > mjx-mtd':{"text-align":"right"},"mjx-mtd[extra]":{padding:0},'mjx-mtd[rowalign="top"]':{"vertical-align":"top"},'mjx-mtd[rowalign="center"]':{"vertical-align":"middle"},'mjx-mtd[rowalign="bottom"]':{"vertical-align":"bottom"},'mjx-mtd[rowalign="baseline"]':{"vertical-align":"baseline"},'mjx-mtd[rowalign="axis"]':{"vertical-align":".25em"}},l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtd=s},1259:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmtext=void 0,r(5355)),s=r(6319),r=r(4770),s=(o=(0,s.CommonMtextMixin)(a.CHTMLWrapper),i(l,o),l.kind=r.MmlMtext.prototype.kind,l);function l(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtext=s},3571:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmlabeledtr=e.CHTMLmtr=void 0,r(5355)),s=r(5766),l=r(5766),r=r(5022),c=(o=(0,s.CommonMtrMixin)(a.CHTMLWrapper),i(u,o),u.prototype.toCHTML=function(t){o.prototype.toCHTML.call(this,t);t=this.node.attributes.get("rowalign");"baseline"!==t&&this.adaptor.setAttribute(this.chtml,"rowalign",t)},u.kind=r.MmlMtr.prototype.kind,u.styles={"mjx-mtr":{display:"table-row"},'mjx-mtr[rowalign="top"] > mjx-mtd':{"vertical-align":"top"},'mjx-mtr[rowalign="center"] > mjx-mtd':{"vertical-align":"middle"},'mjx-mtr[rowalign="bottom"] > mjx-mtd':{"vertical-align":"bottom"},'mjx-mtr[rowalign="baseline"] > mjx-mtd':{"vertical-align":"baseline"},'mjx-mtr[rowalign="axis"] > mjx-mtd':{"vertical-align":".25em"}},u);function u(){return null!==o&&o.apply(this,arguments)||this}e.CHTMLmtr=c;p=(0,l.CommonMlabeledtrMixin)(c),i(h,p),h.prototype.toCHTML=function(t){p.prototype.toCHTML.call(this,t);var e,t=this.adaptor.firstChild(this.chtml);t&&(this.adaptor.remove(t),e=this.node.attributes.get("rowalign"),e=this.html("mjx-mtr","baseline"!==e&&"axis"!==e?{rowalign:e}:{},[t]),this.adaptor.append(this.parent.labels,e))},h.prototype.markUsed=function(){p.prototype.markUsed.call(this),this.jax.wrapperUsage.add(c.kind)},h.kind=r.MmlMlabeledtr.prototype.kind,h.styles={"mjx-mlabeledtr":{display:"table-row"},'mjx-mlabeledtr[rowalign="top"] > mjx-mtd':{"vertical-align":"top"},'mjx-mlabeledtr[rowalign="center"] > mjx-mtd':{"vertical-align":"middle"},'mjx-mlabeledtr[rowalign="bottom"] > mjx-mtd':{"vertical-align":"bottom"},'mjx-mlabeledtr[rowalign="baseline"] > mjx-mtd':{"vertical-align":"baseline"},'mjx-mlabeledtr[rowalign="axis"] > mjx-mtd':{"vertical-align":".25em"}};var p,s=h;function h(){return null!==p&&p.apply(this,arguments)||this}e.CHTMLmlabeledtr=s},6590:function(t,e,r){var n,a,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmunderover=e.CHTMLmover=e.CHTMLmunder=void 0,r(4300)),s=r(1971),l=r(1971),c=r(1971),r=r(5184),s=(a=(0,s.CommonMunderMixin)(i.CHTMLmsub),o(u,a),u.prototype.toCHTML=function(t){if(this.hasMovableLimits())return a.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(t);var t=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-row")),this.html("mjx-base")),e=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-row")),this.html("mjx-under")),r=(this.baseChild.toCHTML(t),this.scriptChild.toCHTML(e),this.baseChild.getOuterBBox()),n=this.scriptChild.getOuterBBox(),o=this.getUnderKV(r,n)[0],i=this.isLineBelow?0:this.getDelta(!0);this.adaptor.setStyle(e,"paddingTop",this.em(o)),this.setDeltaW([t,e],this.getDeltaW([r,n],[0,-i])),this.adjustUnderDepth(e,n)},u.kind=r.MmlMunder.prototype.kind,u.styles={"mjx-over":{"text-align":"left"},'mjx-munder:not([limits="false"])':{display:"inline-table"},"mjx-munder > mjx-row":{"text-align":"left"},"mjx-under":{"padding-bottom":".1em"}},u);function u(){return null!==a&&a.apply(this,arguments)||this}e.CHTMLmunder=s;p=(0,l.CommonMoverMixin)(i.CHTMLmsup),o(h,p),h.prototype.toCHTML=function(t){if(this.hasMovableLimits())return p.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(t);var t=this.adaptor.append(this.chtml,this.html("mjx-over")),e=this.adaptor.append(this.chtml,this.html("mjx-base")),r=(this.scriptChild.toCHTML(t),this.baseChild.toCHTML(e),this.scriptChild.getOuterBBox()),n=this.baseChild.getOuterBBox(),o=(this.adjustBaseHeight(e,n),this.getOverKU(n,r)[0]),i=this.isLineAbove?0:this.getDelta();this.adaptor.setStyle(t,"paddingBottom",this.em(o)),this.setDeltaW([e,t],this.getDeltaW([n,r],[0,i])),this.adjustOverDepth(t,r)},h.kind=r.MmlMover.prototype.kind,h.styles={'mjx-mover:not([limits="false"])':{"padding-top":".1em"},'mjx-mover:not([limits="false"]) > *':{display:"block","text-align":"left"}};var p,s=h;function h(){return null!==p&&p.apply(this,arguments)||this}e.CHTMLmover=s;d=(0,c.CommonMunderoverMixin)(i.CHTMLmsubsup),o(f,d),f.prototype.toCHTML=function(t){if(this.hasMovableLimits())return d.prototype.toCHTML.call(this,t),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(t);var t=this.adaptor.append(this.chtml,this.html("mjx-over")),e=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-box")),this.html("mjx-munder")),r=this.adaptor.append(this.adaptor.append(e,this.html("mjx-row")),this.html("mjx-base")),e=this.adaptor.append(this.adaptor.append(e,this.html("mjx-row")),this.html("mjx-under")),n=(this.overChild.toCHTML(t),this.baseChild.toCHTML(r),this.underChild.toCHTML(e),this.overChild.getOuterBBox()),o=this.baseChild.getOuterBBox(),i=this.underChild.getOuterBBox(),a=(this.adjustBaseHeight(r,o),this.getOverKU(o,n)[0]),s=this.getUnderKV(o,i)[0],l=this.getDelta();this.adaptor.setStyle(t,"paddingBottom",this.em(a)),this.adaptor.setStyle(e,"paddingTop",this.em(s)),this.setDeltaW([r,e,t],this.getDeltaW([o,i,n],[0,this.isLineBelow?0:-l,this.isLineAbove?0:l])),this.adjustOverDepth(t,n),this.adjustUnderDepth(e,i)},f.prototype.markUsed=function(){d.prototype.markUsed.call(this),this.jax.wrapperUsage.add(i.CHTMLmsubsup.kind)},f.kind=r.MmlMunderover.prototype.kind,f.styles={'mjx-munderover:not([limits="false"])':{"padding-top":".1em"},'mjx-munderover:not([limits="false"]) > *':{display:"block"}};var d,l=f;function f(){return null!==d&&d.apply(this,arguments)||this}e.CHTMLmunderover=l},8650:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLscriptbase=void 0,r(5355)),r=(o=(0,r(167).CommonScriptbaseMixin)(s.CHTMLWrapper),i(l,o),l.prototype.toCHTML=function(t){this.chtml=this.standardCHTMLnode(t);var t=a(this.getOffset(),2),e=t[0],t=t[1],e=e-(this.baseRemoveIc?this.baseIc:0),t={"vertical-align":this.em(t)};e&&(t["margin-left"]=this.em(e)),this.baseChild.toCHTML(this.chtml),this.scriptChild.toCHTML(this.adaptor.append(this.chtml,this.html("mjx-script",{style:t})))},l.prototype.setDeltaW=function(t,e){for(var r=0;r\\338"},8816:{c:"\\2264\\338"},8817:{c:"\\2265\\338"},8832:{c:"\\227A\\338"},8833:{c:"\\227B\\338"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{c:"\\2286\\338"},8841:{c:"\\2287\\338"},8876:{c:"\\22A2\\338"},8877:{c:"\\22A8\\338"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9653:{c:"\\25B3"},9663:{c:"\\25BD"},10072:{c:"\\2223"},10744:{c:"/",f:"BI"},10799:{c:"\\D7"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},4515:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.doubleStruck=void 0;var n=r(6001);Object.defineProperty(e,"doubleStruck",{enumerable:!0,get:function(){return n.doubleStruck}})},6555:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.frakturBold=void 0;var n=r(8042),r=r(3696);e.frakturBold=(0,n.AddCSS)(r.frakturBold,{8260:{c:"/"}})},2183:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.fraktur=void 0;var n=r(8042),r=r(9587);e.fraktur=(0,n.AddCSS)(r.fraktur,{8260:{c:"/"}})},3490:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.italic=void 0;var n=r(8042),r=r(8348);e.italic=(0,n.AddCSS)(r.italic,{47:{f:"I"},989:{c:"\\E008",f:"A"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/",f:"I"},8710:{c:"\\394",f:"I"},10744:{c:"/",f:"I"}})},9056:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.largeop=void 0;var n=r(8042),r=r(1376);e.largeop=(0,n.AddCSS)(r.largeop,{8214:{f:"S1"},8260:{c:"/"},8593:{f:"S1"},8595:{f:"S1"},8657:{f:"S1"},8659:{f:"S1"},8739:{f:"S1"},8741:{f:"S1"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},10072:{c:"\\2223",f:"S1"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},3019:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.monospace=void 0;var n=r(8042),r=r(1439);e.monospace=(0,n.AddCSS)(r.monospace,{697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8215:{c:"_"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8710:{c:"\\394"}})},2713:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.normal=void 0;var n=r(8042),r=r(331);e.normal=(0,n.AddCSS)(r.normal,{163:{f:"MI"},165:{f:"A"},174:{f:"A"},183:{c:"\\22C5"},240:{f:"A"},697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8192:{c:""},8193:{c:""},8194:{c:""},8195:{c:""},8196:{c:""},8197:{c:""},8198:{c:""},8201:{c:""},8202:{c:""},8203:{c:""},8204:{c:""},8213:{c:"\\2014"},8214:{c:"\\2225"},8215:{c:"_"},8226:{c:"\\2219"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8245:{f:"A"},8246:{c:"\\2035\\2035",f:"A"},8247:{c:"\\2035\\2035\\2035",f:"A"},8254:{c:"\\2C9"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8288:{c:""},8289:{c:""},8290:{c:""},8291:{c:""},8292:{c:""},8407:{c:"\\2192",f:"V"},8450:{c:"C",f:"A"},8459:{c:"H",f:"SC"},8460:{c:"H",f:"FR"},8461:{c:"H",f:"A"},8462:{c:"h",f:"I"},8463:{f:"A"},8464:{c:"I",f:"SC"},8465:{c:"I",f:"FR"},8466:{c:"L",f:"SC"},8469:{c:"N",f:"A"},8473:{c:"P",f:"A"},8474:{c:"Q",f:"A"},8475:{c:"R",f:"SC"},8476:{c:"R",f:"FR"},8477:{c:"R",f:"A"},8484:{c:"Z",f:"A"},8486:{c:"\\3A9"},8487:{f:"A"},8488:{c:"Z",f:"FR"},8492:{c:"B",f:"SC"},8493:{c:"C",f:"FR"},8496:{c:"E",f:"SC"},8497:{c:"F",f:"SC"},8498:{f:"A"},8499:{c:"M",f:"SC"},8502:{f:"A"},8503:{f:"A"},8504:{f:"A"},8513:{f:"A"},8602:{f:"A"},8603:{f:"A"},8606:{f:"A"},8608:{f:"A"},8610:{f:"A"},8611:{f:"A"},8619:{f:"A"},8620:{f:"A"},8621:{f:"A"},8622:{f:"A"},8624:{f:"A"},8625:{f:"A"},8630:{f:"A"},8631:{f:"A"},8634:{f:"A"},8635:{f:"A"},8638:{f:"A"},8639:{f:"A"},8642:{f:"A"},8643:{f:"A"},8644:{f:"A"},8646:{f:"A"},8647:{f:"A"},8648:{f:"A"},8649:{f:"A"},8650:{f:"A"},8651:{f:"A"},8653:{f:"A"},8654:{f:"A"},8655:{f:"A"},8666:{f:"A"},8667:{f:"A"},8669:{f:"A"},8672:{f:"A"},8674:{f:"A"},8705:{f:"A"},8708:{c:"\\2203\\338"},8710:{c:"\\394"},8716:{c:"\\220B\\338"},8717:{f:"A"},8719:{f:"S1"},8720:{f:"S1"},8721:{f:"S1"},8724:{f:"A"},8737:{f:"A"},8738:{f:"A"},8740:{f:"A"},8742:{f:"A"},8748:{f:"S1"},8749:{f:"S1"},8750:{f:"S1"},8756:{f:"A"},8757:{f:"A"},8765:{f:"A"},8769:{f:"A"},8770:{f:"A"},8772:{c:"\\2243\\338"},8775:{c:"\\2246",f:"A"},8777:{c:"\\2248\\338"},8778:{f:"A"},8782:{f:"A"},8783:{f:"A"},8785:{f:"A"},8786:{f:"A"},8787:{f:"A"},8790:{f:"A"},8791:{f:"A"},8796:{f:"A"},8802:{c:"\\2261\\338"},8806:{f:"A"},8807:{f:"A"},8808:{f:"A"},8809:{f:"A"},8812:{f:"A"},8813:{c:"\\224D\\338"},8814:{f:"A"},8815:{f:"A"},8816:{f:"A"},8817:{f:"A"},8818:{f:"A"},8819:{f:"A"},8820:{c:"\\2272\\338"},8821:{c:"\\2273\\338"},8822:{f:"A"},8823:{f:"A"},8824:{c:"\\2276\\338"},8825:{c:"\\2277\\338"},8828:{f:"A"},8829:{f:"A"},8830:{f:"A"},8831:{f:"A"},8832:{f:"A"},8833:{f:"A"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{f:"A"},8841:{f:"A"},8842:{f:"A"},8843:{f:"A"},8847:{f:"A"},8848:{f:"A"},8858:{f:"A"},8859:{f:"A"},8861:{f:"A"},8862:{f:"A"},8863:{f:"A"},8864:{f:"A"},8865:{f:"A"},8873:{f:"A"},8874:{f:"A"},8876:{f:"A"},8877:{f:"A"},8878:{f:"A"},8879:{f:"A"},8882:{f:"A"},8883:{f:"A"},8884:{f:"A"},8885:{f:"A"},8888:{f:"A"},8890:{f:"A"},8891:{f:"A"},8892:{f:"A"},8896:{f:"S1"},8897:{f:"S1"},8898:{f:"S1"},8899:{f:"S1"},8903:{f:"A"},8905:{f:"A"},8906:{f:"A"},8907:{f:"A"},8908:{f:"A"},8909:{f:"A"},8910:{f:"A"},8911:{f:"A"},8912:{f:"A"},8913:{f:"A"},8914:{f:"A"},8915:{f:"A"},8916:{f:"A"},8918:{f:"A"},8919:{f:"A"},8920:{f:"A"},8921:{f:"A"},8922:{f:"A"},8923:{f:"A"},8926:{f:"A"},8927:{f:"A"},8928:{f:"A"},8929:{f:"A"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},8934:{f:"A"},8935:{f:"A"},8936:{f:"A"},8937:{f:"A"},8938:{f:"A"},8939:{f:"A"},8940:{f:"A"},8941:{f:"A"},8965:{c:"\\22BC",f:"A"},8966:{c:"\\2A5E",f:"A"},8988:{c:"\\250C",f:"A"},8989:{c:"\\2510",f:"A"},8990:{c:"\\2514",f:"A"},8991:{c:"\\2518",f:"A"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},9416:{f:"A"},9484:{f:"A"},9488:{f:"A"},9492:{f:"A"},9496:{f:"A"},9585:{f:"A"},9586:{f:"A"},9632:{f:"A"},9633:{f:"A"},9642:{c:"\\25A0",f:"A"},9650:{f:"A"},9652:{c:"\\25B2",f:"A"},9653:{c:"\\25B3"},9654:{f:"A"},9656:{c:"\\25B6",f:"A"},9660:{f:"A"},9662:{c:"\\25BC",f:"A"},9663:{c:"\\25BD"},9664:{f:"A"},9666:{c:"\\25C0",f:"A"},9674:{f:"A"},9723:{c:"\\25A1",f:"A"},9724:{c:"\\25A0",f:"A"},9733:{f:"A"},10003:{f:"A"},10016:{f:"A"},10072:{c:"\\2223"},10731:{f:"A"},10744:{c:"/",f:"I"},10752:{f:"S1"},10753:{f:"S1"},10754:{f:"S1"},10756:{f:"S1"},10758:{f:"S1"},10764:{c:"\\222C\\222C",f:"S1"},10799:{c:"\\D7"},10846:{f:"A"},10877:{f:"A"},10878:{f:"A"},10885:{f:"A"},10886:{f:"A"},10887:{f:"A"},10888:{f:"A"},10889:{f:"A"},10890:{f:"A"},10891:{f:"A"},10892:{f:"A"},10901:{f:"A"},10902:{f:"A"},10933:{f:"A"},10934:{f:"A"},10935:{f:"A"},10936:{f:"A"},10937:{f:"A"},10938:{f:"A"},10949:{f:"A"},10950:{f:"A"},10955:{f:"A"},10956:{f:"A"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57350:{f:"A"},57351:{f:"A"},57352:{f:"A"},57353:{f:"A"},57356:{f:"A"},57357:{f:"A"},57358:{f:"A"},57359:{f:"A"},57360:{f:"A"},57361:{f:"A"},57366:{f:"A"},57367:{f:"A"},57368:{f:"A"},57369:{f:"A"},57370:{f:"A"},57371:{f:"A"},119808:{c:"A",f:"B"},119809:{c:"B",f:"B"},119810:{c:"C",f:"B"},119811:{c:"D",f:"B"},119812:{c:"E",f:"B"},119813:{c:"F",f:"B"},119814:{c:"G",f:"B"},119815:{c:"H",f:"B"},119816:{c:"I",f:"B"},119817:{c:"J",f:"B"},119818:{c:"K",f:"B"},119819:{c:"L",f:"B"},119820:{c:"M",f:"B"},119821:{c:"N",f:"B"},119822:{c:"O",f:"B"},119823:{c:"P",f:"B"},119824:{c:"Q",f:"B"},119825:{c:"R",f:"B"},119826:{c:"S",f:"B"},119827:{c:"T",f:"B"},119828:{c:"U",f:"B"},119829:{c:"V",f:"B"},119830:{c:"W",f:"B"},119831:{c:"X",f:"B"},119832:{c:"Y",f:"B"},119833:{c:"Z",f:"B"},119834:{c:"a",f:"B"},119835:{c:"b",f:"B"},119836:{c:"c",f:"B"},119837:{c:"d",f:"B"},119838:{c:"e",f:"B"},119839:{c:"f",f:"B"},119840:{c:"g",f:"B"},119841:{c:"h",f:"B"},119842:{c:"i",f:"B"},119843:{c:"j",f:"B"},119844:{c:"k",f:"B"},119845:{c:"l",f:"B"},119846:{c:"m",f:"B"},119847:{c:"n",f:"B"},119848:{c:"o",f:"B"},119849:{c:"p",f:"B"},119850:{c:"q",f:"B"},119851:{c:"r",f:"B"},119852:{c:"s",f:"B"},119853:{c:"t",f:"B"},119854:{c:"u",f:"B"},119855:{c:"v",f:"B"},119856:{c:"w",f:"B"},119857:{c:"x",f:"B"},119858:{c:"y",f:"B"},119859:{c:"z",f:"B"},119860:{c:"A",f:"I"},119861:{c:"B",f:"I"},119862:{c:"C",f:"I"},119863:{c:"D",f:"I"},119864:{c:"E",f:"I"},119865:{c:"F",f:"I"},119866:{c:"G",f:"I"},119867:{c:"H",f:"I"},119868:{c:"I",f:"I"},119869:{c:"J",f:"I"},119870:{c:"K",f:"I"},119871:{c:"L",f:"I"},119872:{c:"M",f:"I"},119873:{c:"N",f:"I"},119874:{c:"O",f:"I"},119875:{c:"P",f:"I"},119876:{c:"Q",f:"I"},119877:{c:"R",f:"I"},119878:{c:"S",f:"I"},119879:{c:"T",f:"I"},119880:{c:"U",f:"I"},119881:{c:"V",f:"I"},119882:{c:"W",f:"I"},119883:{c:"X",f:"I"},119884:{c:"Y",f:"I"},119885:{c:"Z",f:"I"},119886:{c:"a",f:"I"},119887:{c:"b",f:"I"},119888:{c:"c",f:"I"},119889:{c:"d",f:"I"},119890:{c:"e",f:"I"},119891:{c:"f",f:"I"},119892:{c:"g",f:"I"},119894:{c:"i",f:"I"},119895:{c:"j",f:"I"},119896:{c:"k",f:"I"},119897:{c:"l",f:"I"},119898:{c:"m",f:"I"},119899:{c:"n",f:"I"},119900:{c:"o",f:"I"},119901:{c:"p",f:"I"},119902:{c:"q",f:"I"},119903:{c:"r",f:"I"},119904:{c:"s",f:"I"},119905:{c:"t",f:"I"},119906:{c:"u",f:"I"},119907:{c:"v",f:"I"},119908:{c:"w",f:"I"},119909:{c:"x",f:"I"},119910:{c:"y",f:"I"},119911:{c:"z",f:"I"},119912:{c:"A",f:"BI"},119913:{c:"B",f:"BI"},119914:{c:"C",f:"BI"},119915:{c:"D",f:"BI"},119916:{c:"E",f:"BI"},119917:{c:"F",f:"BI"},119918:{c:"G",f:"BI"},119919:{c:"H",f:"BI"},119920:{c:"I",f:"BI"},119921:{c:"J",f:"BI"},119922:{c:"K",f:"BI"},119923:{c:"L",f:"BI"},119924:{c:"M",f:"BI"},119925:{c:"N",f:"BI"},119926:{c:"O",f:"BI"},119927:{c:"P",f:"BI"},119928:{c:"Q",f:"BI"},119929:{c:"R",f:"BI"},119930:{c:"S",f:"BI"},119931:{c:"T",f:"BI"},119932:{c:"U",f:"BI"},119933:{c:"V",f:"BI"},119934:{c:"W",f:"BI"},119935:{c:"X",f:"BI"},119936:{c:"Y",f:"BI"},119937:{c:"Z",f:"BI"},119938:{c:"a",f:"BI"},119939:{c:"b",f:"BI"},119940:{c:"c",f:"BI"},119941:{c:"d",f:"BI"},119942:{c:"e",f:"BI"},119943:{c:"f",f:"BI"},119944:{c:"g",f:"BI"},119945:{c:"h",f:"BI"},119946:{c:"i",f:"BI"},119947:{c:"j",f:"BI"},119948:{c:"k",f:"BI"},119949:{c:"l",f:"BI"},119950:{c:"m",f:"BI"},119951:{c:"n",f:"BI"},119952:{c:"o",f:"BI"},119953:{c:"p",f:"BI"},119954:{c:"q",f:"BI"},119955:{c:"r",f:"BI"},119956:{c:"s",f:"BI"},119957:{c:"t",f:"BI"},119958:{c:"u",f:"BI"},119959:{c:"v",f:"BI"},119960:{c:"w",f:"BI"},119961:{c:"x",f:"BI"},119962:{c:"y",f:"BI"},119963:{c:"z",f:"BI"},119964:{c:"A",f:"SC"},119966:{c:"C",f:"SC"},119967:{c:"D",f:"SC"},119970:{c:"G",f:"SC"},119973:{c:"J",f:"SC"},119974:{c:"K",f:"SC"},119977:{c:"N",f:"SC"},119978:{c:"O",f:"SC"},119979:{c:"P",f:"SC"},119980:{c:"Q",f:"SC"},119982:{c:"S",f:"SC"},119983:{c:"T",f:"SC"},119984:{c:"U",f:"SC"},119985:{c:"V",f:"SC"},119986:{c:"W",f:"SC"},119987:{c:"X",f:"SC"},119988:{c:"Y",f:"SC"},119989:{c:"Z",f:"SC"},120068:{c:"A",f:"FR"},120069:{c:"B",f:"FR"},120071:{c:"D",f:"FR"},120072:{c:"E",f:"FR"},120073:{c:"F",f:"FR"},120074:{c:"G",f:"FR"},120077:{c:"J",f:"FR"},120078:{c:"K",f:"FR"},120079:{c:"L",f:"FR"},120080:{c:"M",f:"FR"},120081:{c:"N",f:"FR"},120082:{c:"O",f:"FR"},120083:{c:"P",f:"FR"},120084:{c:"Q",f:"FR"},120086:{c:"S",f:"FR"},120087:{c:"T",f:"FR"},120088:{c:"U",f:"FR"},120089:{c:"V",f:"FR"},120090:{c:"W",f:"FR"},120091:{c:"X",f:"FR"},120092:{c:"Y",f:"FR"},120094:{c:"a",f:"FR"},120095:{c:"b",f:"FR"},120096:{c:"c",f:"FR"},120097:{c:"d",f:"FR"},120098:{c:"e",f:"FR"},120099:{c:"f",f:"FR"},120100:{c:"g",f:"FR"},120101:{c:"h",f:"FR"},120102:{c:"i",f:"FR"},120103:{c:"j",f:"FR"},120104:{c:"k",f:"FR"},120105:{c:"l",f:"FR"},120106:{c:"m",f:"FR"},120107:{c:"n",f:"FR"},120108:{c:"o",f:"FR"},120109:{c:"p",f:"FR"},120110:{c:"q",f:"FR"},120111:{c:"r",f:"FR"},120112:{c:"s",f:"FR"},120113:{c:"t",f:"FR"},120114:{c:"u",f:"FR"},120115:{c:"v",f:"FR"},120116:{c:"w",f:"FR"},120117:{c:"x",f:"FR"},120118:{c:"y",f:"FR"},120119:{c:"z",f:"FR"},120120:{c:"A",f:"A"},120121:{c:"B",f:"A"},120123:{c:"D",f:"A"},120124:{c:"E",f:"A"},120125:{c:"F",f:"A"},120126:{c:"G",f:"A"},120128:{c:"I",f:"A"},120129:{c:"J",f:"A"},120130:{c:"K",f:"A"},120131:{c:"L",f:"A"},120132:{c:"M",f:"A"},120134:{c:"O",f:"A"},120138:{c:"S",f:"A"},120139:{c:"T",f:"A"},120140:{c:"U",f:"A"},120141:{c:"V",f:"A"},120142:{c:"W",f:"A"},120143:{c:"X",f:"A"},120144:{c:"Y",f:"A"},120172:{c:"A",f:"FRB"},120173:{c:"B",f:"FRB"},120174:{c:"C",f:"FRB"},120175:{c:"D",f:"FRB"},120176:{c:"E",f:"FRB"},120177:{c:"F",f:"FRB"},120178:{c:"G",f:"FRB"},120179:{c:"H",f:"FRB"},120180:{c:"I",f:"FRB"},120181:{c:"J",f:"FRB"},120182:{c:"K",f:"FRB"},120183:{c:"L",f:"FRB"},120184:{c:"M",f:"FRB"},120185:{c:"N",f:"FRB"},120186:{c:"O",f:"FRB"},120187:{c:"P",f:"FRB"},120188:{c:"Q",f:"FRB"},120189:{c:"R",f:"FRB"},120190:{c:"S",f:"FRB"},120191:{c:"T",f:"FRB"},120192:{c:"U",f:"FRB"},120193:{c:"V",f:"FRB"},120194:{c:"W",f:"FRB"},120195:{c:"X",f:"FRB"},120196:{c:"Y",f:"FRB"},120197:{c:"Z",f:"FRB"},120198:{c:"a",f:"FRB"},120199:{c:"b",f:"FRB"},120200:{c:"c",f:"FRB"},120201:{c:"d",f:"FRB"},120202:{c:"e",f:"FRB"},120203:{c:"f",f:"FRB"},120204:{c:"g",f:"FRB"},120205:{c:"h",f:"FRB"},120206:{c:"i",f:"FRB"},120207:{c:"j",f:"FRB"},120208:{c:"k",f:"FRB"},120209:{c:"l",f:"FRB"},120210:{c:"m",f:"FRB"},120211:{c:"n",f:"FRB"},120212:{c:"o",f:"FRB"},120213:{c:"p",f:"FRB"},120214:{c:"q",f:"FRB"},120215:{c:"r",f:"FRB"},120216:{c:"s",f:"FRB"},120217:{c:"t",f:"FRB"},120218:{c:"u",f:"FRB"},120219:{c:"v",f:"FRB"},120220:{c:"w",f:"FRB"},120221:{c:"x",f:"FRB"},120222:{c:"y",f:"FRB"},120223:{c:"z",f:"FRB"},120224:{c:"A",f:"SS"},120225:{c:"B",f:"SS"},120226:{c:"C",f:"SS"},120227:{c:"D",f:"SS"},120228:{c:"E",f:"SS"},120229:{c:"F",f:"SS"},120230:{c:"G",f:"SS"},120231:{c:"H",f:"SS"},120232:{c:"I",f:"SS"},120233:{c:"J",f:"SS"},120234:{c:"K",f:"SS"},120235:{c:"L",f:"SS"},120236:{c:"M",f:"SS"},120237:{c:"N",f:"SS"},120238:{c:"O",f:"SS"},120239:{c:"P",f:"SS"},120240:{c:"Q",f:"SS"},120241:{c:"R",f:"SS"},120242:{c:"S",f:"SS"},120243:{c:"T",f:"SS"},120244:{c:"U",f:"SS"},120245:{c:"V",f:"SS"},120246:{c:"W",f:"SS"},120247:{c:"X",f:"SS"},120248:{c:"Y",f:"SS"},120249:{c:"Z",f:"SS"},120250:{c:"a",f:"SS"},120251:{c:"b",f:"SS"},120252:{c:"c",f:"SS"},120253:{c:"d",f:"SS"},120254:{c:"e",f:"SS"},120255:{c:"f",f:"SS"},120256:{c:"g",f:"SS"},120257:{c:"h",f:"SS"},120258:{c:"i",f:"SS"},120259:{c:"j",f:"SS"},120260:{c:"k",f:"SS"},120261:{c:"l",f:"SS"},120262:{c:"m",f:"SS"},120263:{c:"n",f:"SS"},120264:{c:"o",f:"SS"},120265:{c:"p",f:"SS"},120266:{c:"q",f:"SS"},120267:{c:"r",f:"SS"},120268:{c:"s",f:"SS"},120269:{c:"t",f:"SS"},120270:{c:"u",f:"SS"},120271:{c:"v",f:"SS"},120272:{c:"w",f:"SS"},120273:{c:"x",f:"SS"},120274:{c:"y",f:"SS"},120275:{c:"z",f:"SS"},120276:{c:"A",f:"SSB"},120277:{c:"B",f:"SSB"},120278:{c:"C",f:"SSB"},120279:{c:"D",f:"SSB"},120280:{c:"E",f:"SSB"},120281:{c:"F",f:"SSB"},120282:{c:"G",f:"SSB"},120283:{c:"H",f:"SSB"},120284:{c:"I",f:"SSB"},120285:{c:"J",f:"SSB"},120286:{c:"K",f:"SSB"},120287:{c:"L",f:"SSB"},120288:{c:"M",f:"SSB"},120289:{c:"N",f:"SSB"},120290:{c:"O",f:"SSB"},120291:{c:"P",f:"SSB"},120292:{c:"Q",f:"SSB"},120293:{c:"R",f:"SSB"},120294:{c:"S",f:"SSB"},120295:{c:"T",f:"SSB"},120296:{c:"U",f:"SSB"},120297:{c:"V",f:"SSB"},120298:{c:"W",f:"SSB"},120299:{c:"X",f:"SSB"},120300:{c:"Y",f:"SSB"},120301:{c:"Z",f:"SSB"},120302:{c:"a",f:"SSB"},120303:{c:"b",f:"SSB"},120304:{c:"c",f:"SSB"},120305:{c:"d",f:"SSB"},120306:{c:"e",f:"SSB"},120307:{c:"f",f:"SSB"},120308:{c:"g",f:"SSB"},120309:{c:"h",f:"SSB"},120310:{c:"i",f:"SSB"},120311:{c:"j",f:"SSB"},120312:{c:"k",f:"SSB"},120313:{c:"l",f:"SSB"},120314:{c:"m",f:"SSB"},120315:{c:"n",f:"SSB"},120316:{c:"o",f:"SSB"},120317:{c:"p",f:"SSB"},120318:{c:"q",f:"SSB"},120319:{c:"r",f:"SSB"},120320:{c:"s",f:"SSB"},120321:{c:"t",f:"SSB"},120322:{c:"u",f:"SSB"},120323:{c:"v",f:"SSB"},120324:{c:"w",f:"SSB"},120325:{c:"x",f:"SSB"},120326:{c:"y",f:"SSB"},120327:{c:"z",f:"SSB"},120328:{c:"A",f:"SSI"},120329:{c:"B",f:"SSI"},120330:{c:"C",f:"SSI"},120331:{c:"D",f:"SSI"},120332:{c:"E",f:"SSI"},120333:{c:"F",f:"SSI"},120334:{c:"G",f:"SSI"},120335:{c:"H",f:"SSI"},120336:{c:"I",f:"SSI"},120337:{c:"J",f:"SSI"},120338:{c:"K",f:"SSI"},120339:{c:"L",f:"SSI"},120340:{c:"M",f:"SSI"},120341:{c:"N",f:"SSI"},120342:{c:"O",f:"SSI"},120343:{c:"P",f:"SSI"},120344:{c:"Q",f:"SSI"},120345:{c:"R",f:"SSI"},120346:{c:"S",f:"SSI"},120347:{c:"T",f:"SSI"},120348:{c:"U",f:"SSI"},120349:{c:"V",f:"SSI"},120350:{c:"W",f:"SSI"},120351:{c:"X",f:"SSI"},120352:{c:"Y",f:"SSI"},120353:{c:"Z",f:"SSI"},120354:{c:"a",f:"SSI"},120355:{c:"b",f:"SSI"},120356:{c:"c",f:"SSI"},120357:{c:"d",f:"SSI"},120358:{c:"e",f:"SSI"},120359:{c:"f",f:"SSI"},120360:{c:"g",f:"SSI"},120361:{c:"h",f:"SSI"},120362:{c:"i",f:"SSI"},120363:{c:"j",f:"SSI"},120364:{c:"k",f:"SSI"},120365:{c:"l",f:"SSI"},120366:{c:"m",f:"SSI"},120367:{c:"n",f:"SSI"},120368:{c:"o",f:"SSI"},120369:{c:"p",f:"SSI"},120370:{c:"q",f:"SSI"},120371:{c:"r",f:"SSI"},120372:{c:"s",f:"SSI"},120373:{c:"t",f:"SSI"},120374:{c:"u",f:"SSI"},120375:{c:"v",f:"SSI"},120376:{c:"w",f:"SSI"},120377:{c:"x",f:"SSI"},120378:{c:"y",f:"SSI"},120379:{c:"z",f:"SSI"},120432:{c:"A",f:"T"},120433:{c:"B",f:"T"},120434:{c:"C",f:"T"},120435:{c:"D",f:"T"},120436:{c:"E",f:"T"},120437:{c:"F",f:"T"},120438:{c:"G",f:"T"},120439:{c:"H",f:"T"},120440:{c:"I",f:"T"},120441:{c:"J",f:"T"},120442:{c:"K",f:"T"},120443:{c:"L",f:"T"},120444:{c:"M",f:"T"},120445:{c:"N",f:"T"},120446:{c:"O",f:"T"},120447:{c:"P",f:"T"},120448:{c:"Q",f:"T"},120449:{c:"R",f:"T"},120450:{c:"S",f:"T"},120451:{c:"T",f:"T"},120452:{c:"U",f:"T"},120453:{c:"V",f:"T"},120454:{c:"W",f:"T"},120455:{c:"X",f:"T"},120456:{c:"Y",f:"T"},120457:{c:"Z",f:"T"},120458:{c:"a",f:"T"},120459:{c:"b",f:"T"},120460:{c:"c",f:"T"},120461:{c:"d",f:"T"},120462:{c:"e",f:"T"},120463:{c:"f",f:"T"},120464:{c:"g",f:"T"},120465:{c:"h",f:"T"},120466:{c:"i",f:"T"},120467:{c:"j",f:"T"},120468:{c:"k",f:"T"},120469:{c:"l",f:"T"},120470:{c:"m",f:"T"},120471:{c:"n",f:"T"},120472:{c:"o",f:"T"},120473:{c:"p",f:"T"},120474:{c:"q",f:"T"},120475:{c:"r",f:"T"},120476:{c:"s",f:"T"},120477:{c:"t",f:"T"},120478:{c:"u",f:"T"},120479:{c:"v",f:"T"},120480:{c:"w",f:"T"},120481:{c:"x",f:"T"},120482:{c:"y",f:"T"},120483:{c:"z",f:"T"},120488:{c:"A",f:"B"},120489:{c:"B",f:"B"},120490:{c:"\\393",f:"B"},120491:{c:"\\394",f:"B"},120492:{c:"E",f:"B"},120493:{c:"Z",f:"B"},120494:{c:"H",f:"B"},120495:{c:"\\398",f:"B"},120496:{c:"I",f:"B"},120497:{c:"K",f:"B"},120498:{c:"\\39B",f:"B"},120499:{c:"M",f:"B"},120500:{c:"N",f:"B"},120501:{c:"\\39E",f:"B"},120502:{c:"O",f:"B"},120503:{c:"\\3A0",f:"B"},120504:{c:"P",f:"B"},120506:{c:"\\3A3",f:"B"},120507:{c:"T",f:"B"},120508:{c:"\\3A5",f:"B"},120509:{c:"\\3A6",f:"B"},120510:{c:"X",f:"B"},120511:{c:"\\3A8",f:"B"},120512:{c:"\\3A9",f:"B"},120513:{c:"\\2207",f:"B"},120546:{c:"A",f:"I"},120547:{c:"B",f:"I"},120548:{c:"\\393",f:"I"},120549:{c:"\\394",f:"I"},120550:{c:"E",f:"I"},120551:{c:"Z",f:"I"},120552:{c:"H",f:"I"},120553:{c:"\\398",f:"I"},120554:{c:"I",f:"I"},120555:{c:"K",f:"I"},120556:{c:"\\39B",f:"I"},120557:{c:"M",f:"I"},120558:{c:"N",f:"I"},120559:{c:"\\39E",f:"I"},120560:{c:"O",f:"I"},120561:{c:"\\3A0",f:"I"},120562:{c:"P",f:"I"},120564:{c:"\\3A3",f:"I"},120565:{c:"T",f:"I"},120566:{c:"\\3A5",f:"I"},120567:{c:"\\3A6",f:"I"},120568:{c:"X",f:"I"},120569:{c:"\\3A8",f:"I"},120570:{c:"\\3A9",f:"I"},120572:{c:"\\3B1",f:"I"},120573:{c:"\\3B2",f:"I"},120574:{c:"\\3B3",f:"I"},120575:{c:"\\3B4",f:"I"},120576:{c:"\\3B5",f:"I"},120577:{c:"\\3B6",f:"I"},120578:{c:"\\3B7",f:"I"},120579:{c:"\\3B8",f:"I"},120580:{c:"\\3B9",f:"I"},120581:{c:"\\3BA",f:"I"},120582:{c:"\\3BB",f:"I"},120583:{c:"\\3BC",f:"I"},120584:{c:"\\3BD",f:"I"},120585:{c:"\\3BE",f:"I"},120586:{c:"\\3BF",f:"I"},120587:{c:"\\3C0",f:"I"},120588:{c:"\\3C1",f:"I"},120589:{c:"\\3C2",f:"I"},120590:{c:"\\3C3",f:"I"},120591:{c:"\\3C4",f:"I"},120592:{c:"\\3C5",f:"I"},120593:{c:"\\3C6",f:"I"},120594:{c:"\\3C7",f:"I"},120595:{c:"\\3C8",f:"I"},120596:{c:"\\3C9",f:"I"},120597:{c:"\\2202"},120598:{c:"\\3F5",f:"I"},120599:{c:"\\3D1",f:"I"},120600:{c:"\\E009",f:"A"},120601:{c:"\\3D5",f:"I"},120602:{c:"\\3F1",f:"I"},120603:{c:"\\3D6",f:"I"},120604:{c:"A",f:"BI"},120605:{c:"B",f:"BI"},120606:{c:"\\393",f:"BI"},120607:{c:"\\394",f:"BI"},120608:{c:"E",f:"BI"},120609:{c:"Z",f:"BI"},120610:{c:"H",f:"BI"},120611:{c:"\\398",f:"BI"},120612:{c:"I",f:"BI"},120613:{c:"K",f:"BI"},120614:{c:"\\39B",f:"BI"},120615:{c:"M",f:"BI"},120616:{c:"N",f:"BI"},120617:{c:"\\39E",f:"BI"},120618:{c:"O",f:"BI"},120619:{c:"\\3A0",f:"BI"},120620:{c:"P",f:"BI"},120622:{c:"\\3A3",f:"BI"},120623:{c:"T",f:"BI"},120624:{c:"\\3A5",f:"BI"},120625:{c:"\\3A6",f:"BI"},120626:{c:"X",f:"BI"},120627:{c:"\\3A8",f:"BI"},120628:{c:"\\3A9",f:"BI"},120630:{c:"\\3B1",f:"BI"},120631:{c:"\\3B2",f:"BI"},120632:{c:"\\3B3",f:"BI"},120633:{c:"\\3B4",f:"BI"},120634:{c:"\\3B5",f:"BI"},120635:{c:"\\3B6",f:"BI"},120636:{c:"\\3B7",f:"BI"},120637:{c:"\\3B8",f:"BI"},120638:{c:"\\3B9",f:"BI"},120639:{c:"\\3BA",f:"BI"},120640:{c:"\\3BB",f:"BI"},120641:{c:"\\3BC",f:"BI"},120642:{c:"\\3BD",f:"BI"},120643:{c:"\\3BE",f:"BI"},120644:{c:"\\3BF",f:"BI"},120645:{c:"\\3C0",f:"BI"},120646:{c:"\\3C1",f:"BI"},120647:{c:"\\3C2",f:"BI"},120648:{c:"\\3C3",f:"BI"},120649:{c:"\\3C4",f:"BI"},120650:{c:"\\3C5",f:"BI"},120651:{c:"\\3C6",f:"BI"},120652:{c:"\\3C7",f:"BI"},120653:{c:"\\3C8",f:"BI"},120654:{c:"\\3C9",f:"BI"},120655:{c:"\\2202",f:"B"},120656:{c:"\\3F5",f:"BI"},120657:{c:"\\3D1",f:"BI"},120658:{c:"\\E009",f:"A"},120659:{c:"\\3D5",f:"BI"},120660:{c:"\\3F1",f:"BI"},120661:{c:"\\3D6",f:"BI"},120662:{c:"A",f:"SSB"},120663:{c:"B",f:"SSB"},120664:{c:"\\393",f:"SSB"},120665:{c:"\\394",f:"SSB"},120666:{c:"E",f:"SSB"},120667:{c:"Z",f:"SSB"},120668:{c:"H",f:"SSB"},120669:{c:"\\398",f:"SSB"},120670:{c:"I",f:"SSB"},120671:{c:"K",f:"SSB"},120672:{c:"\\39B",f:"SSB"},120673:{c:"M",f:"SSB"},120674:{c:"N",f:"SSB"},120675:{c:"\\39E",f:"SSB"},120676:{c:"O",f:"SSB"},120677:{c:"\\3A0",f:"SSB"},120678:{c:"P",f:"SSB"},120680:{c:"\\3A3",f:"SSB"},120681:{c:"T",f:"SSB"},120682:{c:"\\3A5",f:"SSB"},120683:{c:"\\3A6",f:"SSB"},120684:{c:"X",f:"SSB"},120685:{c:"\\3A8",f:"SSB"},120686:{c:"\\3A9",f:"SSB"},120782:{c:"0",f:"B"},120783:{c:"1",f:"B"},120784:{c:"2",f:"B"},120785:{c:"3",f:"B"},120786:{c:"4",f:"B"},120787:{c:"5",f:"B"},120788:{c:"6",f:"B"},120789:{c:"7",f:"B"},120790:{c:"8",f:"B"},120791:{c:"9",f:"B"},120802:{c:"0",f:"SS"},120803:{c:"1",f:"SS"},120804:{c:"2",f:"SS"},120805:{c:"3",f:"SS"},120806:{c:"4",f:"SS"},120807:{c:"5",f:"SS"},120808:{c:"6",f:"SS"},120809:{c:"7",f:"SS"},120810:{c:"8",f:"SS"},120811:{c:"9",f:"SS"},120812:{c:"0",f:"SSB"},120813:{c:"1",f:"SSB"},120814:{c:"2",f:"SSB"},120815:{c:"3",f:"SSB"},120816:{c:"4",f:"SSB"},120817:{c:"5",f:"SSB"},120818:{c:"6",f:"SSB"},120819:{c:"7",f:"SSB"},120820:{c:"8",f:"SSB"},120821:{c:"9",f:"SSB"},120822:{c:"0",f:"T"},120823:{c:"1",f:"T"},120824:{c:"2",f:"T"},120825:{c:"3",f:"T"},120826:{c:"4",f:"T"},120827:{c:"5",f:"T"},120828:{c:"6",f:"T"},120829:{c:"7",f:"T"},120830:{c:"8",f:"T"},120831:{c:"9",f:"T"}})},7517:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifBoldItalic=void 0;var n=r(8042),r=r(4886);e.sansSerifBoldItalic=(0,n.AddCSS)(r.sansSerifBoldItalic,{305:{f:"SSB"},567:{f:"SSB"}})},4182:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifBold=void 0;var n=r(8042),r=r(4471);e.sansSerifBold=(0,n.AddCSS)(r.sansSerifBold,{8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},2679:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifItalic=void 0;var n=r(8042),r=r(5181);e.sansSerifItalic=(0,n.AddCSS)(r.sansSerifItalic,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},5469:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerif=void 0;var n=r(8042),r=r(3526);e.sansSerif=(0,n.AddCSS)(r.sansSerif,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},7563:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.scriptBold=void 0;var n=r(5649);Object.defineProperty(e,"scriptBold",{enumerable:!0,get:function(){return n.scriptBold}})},9409:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.script=void 0;var n=r(7153);Object.defineProperty(e,"script",{enumerable:!0,get:function(){return n.script}})},775:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.smallop=void 0;var n=r(8042),r=r(5745);e.smallop=(0,n.AddCSS)(r.smallop,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},10072:{c:"\\2223"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},9551:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texCalligraphicBold=void 0;var n=r(8042),r=r(1411);e.texCalligraphicBold=(0,n.AddCSS)(r.texCalligraphicBold,{305:{f:"B"},567:{f:"B"}})},7907:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texCalligraphic=void 0;var n=r(6384);Object.defineProperty(e,"texCalligraphic",{enumerable:!0,get:function(){return n.texCalligraphic}})},9659:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texMathit=void 0;var n=r(6041);Object.defineProperty(e,"texMathit",{enumerable:!0,get:function(){return n.texMathit}})},98:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texOldstyleBold=void 0;var n=r(8199);Object.defineProperty(e,"texOldstyleBold",{enumerable:!0,get:function(){return n.texOldstyleBold}})},6275:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texOldstyle=void 0;var n=r(9848);Object.defineProperty(e,"texOldstyle",{enumerable:!0,get:function(){return n.texOldstyle}})},6530:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texSize3=void 0;var n=r(8042),r=r(7906);e.texSize3=(0,n.AddCSS)(r.texSize3,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},4409:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texSize4=void 0;var n=r(8042),r=r(2644);e.texSize4=(0,n.AddCSS)(r.texSize4,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57685:{c:"\\E153\\E152"},57686:{c:"\\E151\\E150"}})},5292:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texVariant=void 0;var n=r(8042),r=r(4926);e.texVariant=(0,n.AddCSS)(r.texVariant,{1008:{c:"\\E009"},8463:{f:""},8740:{c:"\\E006"},8742:{c:"\\E007"},8808:{c:"\\E00C"},8809:{c:"\\E00D"},8816:{c:"\\E011"},8817:{c:"\\E00E"},8840:{c:"\\E016"},8841:{c:"\\E018"},8842:{c:"\\E01A"},8843:{c:"\\E01B"},10887:{c:"\\E010"},10888:{c:"\\E00F"},10955:{c:"\\E017"},10956:{c:"\\E019"}})},5884:function(t,e,r){var h=this&&this.__assign||function(){return(h=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},f=(Object.defineProperty(e,"__esModule",{value:!0}),e.FontData=e.NOSTRETCH=e.H=e.V=void 0,r(7233)),r=(e.V=1,e.H=2,e.NOSTRETCH={dir:0},n.charOptions=function(t,e){t=t[e];return 3===t.length&&(t[3]={}),t[3]},Object.defineProperty(n.prototype,"styles",{get:function(){return this._styles},set:function(t){this._styles=t},enumerable:!1,configurable:!0}),n.prototype.createVariant=function(t,e,r){void 0===r&&(r=null);e={linked:[],chars:(e=void 0===e?null:e)?Object.create(this.variant[e].chars):{}};r&&this.variant[r]&&(Object.assign(e.chars,this.variant[r].chars),this.variant[r].linked.push(e.chars),e.chars=Object.create(e.chars)),this.remapSmpChars(e.chars,t),this.variant[t]=e},n.prototype.remapSmpChars=function(t,e){var r,n,o,i,a=this.constructor;if(a.VariantSmp[e]){var s=a.SmpRemap,l=[null,null,a.SmpRemapGreekU,a.SmpRemapGreekL];try{for(var c=S(a.SmpRanges),u=c.next();!u.done;u=c.next()){var p=_(u.value,3),h=p[0],d=p[1],f=p[2],m=a.VariantSmp[e][h];if(m){for(var y,g=d;g<=f;g++)930!==g&&(y=m+g-d,t[g]=this.smpChar(s[y]||y));if(l[h])try{o=void 0;for(var b=S(Object.keys(l[h]).map(function(t){return parseInt(t)})),v=b.next();!v.done;v=b.next())t[g=v.value]=this.smpChar(m+l[h][g])}catch(t){o={error:t}}finally{try{v&&!v.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}}}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}"bold"===e&&(t[988]=this.smpChar(120778),t[989]=this.smpChar(120779))},n.prototype.smpChar=function(t){return[,,,{smp:t}]},n.prototype.createVariants=function(t){var e,r;try{for(var n=S(t),o=n.next();!o.done;o=n.next()){var i=o.value;this.createVariant(i[0],i[1],i[2])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},n.prototype.defineChars=function(t,e){var r,n,o=this.variant[t];Object.assign(o.chars,e);try{for(var i=S(o.linked),a=i.next();!a.done;a=i.next()){var s=a.value;Object.assign(s,e)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},n.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},n.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},n.prototype.getDelimiter=function(t){return this.delimiters[t]},n.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},n.prototype.getStretchVariant=function(t,e){return this.stretchVariants[this.delimiters[t].stretchv?this.delimiters[t].stretchv[e]:0]},n.prototype.getChar=function(t,e){return this.variant[t].chars[e]},n.prototype.getVariant=function(t){return this.variant[t]},n.prototype.getCssFont=function(t){return this.cssFontMap[t]||["serif",!1,!1]},n.prototype.getFamily=function(t){return this.cssFamilyPrefix?this.cssFamilyPrefix+", "+t:t},n.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},n.OPTIONS={unknownFamily:"serif"},n.JAX="common",n.NAME="",n.defaultVariants=[["normal"],["bold","normal"],["italic","normal"],["bold-italic","italic","bold"],["double-struck","bold"],["fraktur","normal"],["bold-fraktur","bold","fraktur"],["script","italic"],["bold-script","bold-italic","script"],["sans-serif","normal"],["bold-sans-serif","bold","sans-serif"],["sans-serif-italic","italic","sans-serif"],["sans-serif-bold-italic","bold-italic","bold-sans-serif"],["monospace","normal"]],n.defaultCssFonts={normal:["unknown",!1,!1],bold:["unknown",!1,!0],italic:["unknown",!0,!1],"bold-italic":["unknown",!0,!0],"double-struck":["unknown",!1,!0],fraktur:["unknown",!1,!1],"bold-fraktur":["unknown",!1,!0],script:["cursive",!1,!1],"bold-script":["cursive",!1,!0],"sans-serif":["sans-serif",!1,!1],"bold-sans-serif":["sans-serif",!1,!0],"sans-serif-italic":["sans-serif",!0,!1],"sans-serif-bold-italic":["sans-serif",!0,!0],monospace:["monospace",!1,!1]},n.defaultCssFamilyPrefix="",n.VariantSmp={bold:[119808,119834,120488,120514,120782],italic:[119860,119886,120546,120572],"bold-italic":[119912,119938,120604,120630],script:[119964,119990],"bold-script":[120016,120042],fraktur:[120068,120094],"double-struck":[120120,120146,,,120792],"bold-fraktur":[120172,120198],"sans-serif":[120224,120250,,,120802],"bold-sans-serif":[120276,120302,120662,120688,120812],"sans-serif-italic":[120328,120354],"sans-serif-bold-italic":[120380,120406,120720,120746],monospace:[120432,120458,,,120822]},n.SmpRanges=[[0,65,90],[1,97,122],[2,913,937],[3,945,969],[4,48,57]],n.SmpRemap={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},n.SmpRemapGreekU={8711:25,1012:17},n.SmpRemapGreekL={977:27,981:29,982:31,1008:28,1009:30,1013:26,8706:25},n.defaultAccentMap={768:"ˋ",769:"ˊ",770:"ˆ",771:"˜",772:"ˉ",774:"˘",775:"˙",776:"¨",778:"˚",780:"ˇ",8594:"⃗",8242:"'",8243:"''",8244:"'''",8245:"`",8246:"``",8247:"```",8279:"''''",8400:"↼",8401:"⇀",8406:"←",8417:"↔",8432:"*",8411:"...",8412:"....",8428:"⇁",8429:"↽",8430:"←",8431:"→"},n.defaultMoMap={45:"−"},n.defaultMnMap={45:"−"},n.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25,separation_factor:1.75,extra_ic:.033},n.defaultDelimiters={},n.defaultChars={},n.defaultSizeVariants=[],n.defaultStretchVariants=[],n);function n(t){void 0===t&&(t=null),this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={},this.skewIcFactor=.75;var e,r,n,o,i=this.constructor;this.options=(0,f.userOptions)((0,f.defaultOptions)({},i.OPTIONS),t),this.params=h({},i.defaultParams),this.sizeVariants=d([],_(i.defaultSizeVariants),!1),this.stretchVariants=d([],_(i.defaultStretchVariants),!1),this.cssFontMap=h({},i.defaultCssFonts);try{for(var a=S(Object.keys(this.cssFontMap)),s=a.next();!s.done;s=a.next()){var l=s.value;"unknown"===this.cssFontMap[l][0]&&(this.cssFontMap[l][0]=this.options.unknownFamily)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}this.cssFamilyPrefix=i.defaultCssFamilyPrefix,this.createVariants(i.defaultVariants),this.defineDelimiters(i.defaultDelimiters);try{for(var c=S(Object.keys(i.defaultChars)),u=c.next();!u.done;u=c.next()){var p=u.value;this.defineChars(p,i.defaultChars[p])}}catch(t){n={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}this.defineRemap("accent",i.defaultAccentMap),this.defineRemap("mo",i.defaultMoMap),this.defineRemap("mn",i.defaultMnMap)}e.FontData=r},5552:function(t,c){var u=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0Math.PI/2-r?t.thickness*a*Math.sin(o+r-Math.PI/2):0);return[i,e,i,e]},remove:e[3]}]}},c.CommonArrow=function(l){return function(t){var e=u(c.arrowDef[t],4),i=e[0],a=e[1],s=e[2],e=e[3];return[t+"arrow",{renderer:function(t,e){var r=t.getBBox(),n=r.w,o=r.h,r=r.d,o=u(s?[o+r,"X"]:[n,"Y"],2),r=o[0],n=o[1],o=t.getOffset(n),r=t.arrow(r,i,a,n,o);l(t,r)},bbox:c.arrowBBox[t],remove:e}]}}},3055:function(t,e,r){var n,i,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return(a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},l=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonOutputJax=void 0,r(2975)),w=r(4474),c=r(7233),u=r(6010),p=r(8054),h=r(4139),r=(i=l.AbstractOutputJax,o(d,i),d.prototype.typeset=function(t,e){this.setDocument(e);var r=this.createNode();return this.toDOM(t,r,e),r},d.prototype.createNode=function(){var t=this.constructor.NAME;return this.html("mjx-container",{class:"MathJax",jax:t})},d.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!=e&&this.adaptor.setStyle(t,"fontSize",(0,u.percent)(e))},d.prototype.toDOM=function(t,e,r){this.setDocument(r=void 0===r?null:r),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,r,e)},d.prototype.getBBox=function(t,e){this.setDocument(e),(this.math=t).root.setTeXclass(null),this.nodeMap=new Map;e=this.factory.wrap(t.root).getOuterBBox();return this.nodeMap=null,e},d.prototype.getMetrics=function(t){this.setDocument(t);var e,r,n=this.adaptor,o=this.getMetricMaps(t);try{for(var i=N(t.math),a=i.next();!a.done;a=i.next()){var s,l,c,u,p,h,d,f=a.value,m=n.parent(f.start.node);f.state()=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},h=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0t.h&&(t.h=s),l>t.d&&(t.d=l),t.ic=f.ic||0,t.sk=f.sk||0,t.dx=f.dx||0}}catch(t){r={error:t}}finally{try{u&&!u.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}1=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMencloseMixin=void 0,s(r(5552))),h=r(505);e.CommonMencloseMixin=function(t){return o(e,n=t),e.prototype.getParameters=function(){var t,e=this.node.attributes,r=e.get("data-padding"),r=(void 0!==r&&(this.padding=this.length2em(r,u.PADDING)),e.get("data-thickness")),r=(void 0!==r&&(this.thickness=this.length2em(r,u.THICKNESS)),e.get("data-arrowhead"));void 0!==r&&(r=(e=l((0,h.split)(r),3))[0],t=e[1],e=e[2],this.arrowhead={x:r?parseFloat(r):u.ARROWX,y:t?parseFloat(t):u.ARROWY,dx:e?parseFloat(e):u.ARROWDX})},e.prototype.getNotations=function(){var t,e,r=this.constructor.notations;try{for(var n=p((0,h.split)(this.node.attributes.get("notation"))),o=n.next();!o.done;o=n.next()){var i=o.value,a=r.get(i);a&&((this.notations[i]=a).renderChild&&(this.renderChild=a.renderer))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.removeRedundantNotations=function(){var t,e,r,n;try{for(var o=p(Object.keys(this.notations)),i=o.next();!i.done;i=o.next()){var a=i.value;if(this.notations[a]){var s=this.notations[a].remove||"";try{r=void 0;for(var l=p(s.split(/ /)),c=l.next();!c.done;c=l.next()){var u=c.value;delete this.notations[u]}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}}}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}},e.prototype.initializeNotations=function(){var t,e;try{for(var r=p(Object.keys(this.notations)),n=r.next();!n.done;n=r.next()){var o=n.value,i=this.notations[o].init;i&&i(this)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=l(this.TRBL,4),n=r[0],o=r[1],i=r[2],r=r[3],a=this.childNodes[0].getBBox();t.combine(a,r,0),t.h+=n,t.d+=i,t.w+=o,this.setChildPWidths(e)},e.prototype.getBBoxExtenders=function(){var t,e,r=[0,0,0,0];try{for(var n=p(Object.keys(this.notations)),o=n.next();!o.done;o=n.next()){var i=o.value;this.maximizeEntries(r,this.notations[i].bbox(this))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},e.prototype.getPadding=function(){var t,e,r=this,n=[0,0,0,0];try{for(var o=p(Object.keys(this.notations)),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.notations[a].border;s&&this.maximizeEntries(n,s(this))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return[0,1,2,3].map(function(t){return r.TRBL[t]-n[t]})},e.prototype.maximizeEntries=function(t,e){for(var r=0;r=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMfencedMixin=void 0,e.CommonMfencedMixin=function(t){return r(e,n=t),e.prototype.createMrow=function(){var t=this.node.factory.create("inferredMrow");t.inheritAttributesFrom(this.node),this.mrow=this.wrap(t),this.mrow.parent=this},e.prototype.addMrowChildren=function(){var t,e,r=this.node,n=this.mrow,o=(this.addMo(r.open),this.childNodes.length&&n.childNodes.push(this.childNodes[0]),0);try{for(var i=l(this.childNodes.slice(1)),a=i.next();!a.done;a=i.next()){var s=a.value;this.addMo(r.separators[o++]),n.childNodes.push(s)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.addMo(r.close),n.stretchChildren()},e.prototype.addMo=function(t){t&&(t=this.wrap(t),this.mrow.childNodes.push(t),t.parent=this.mrow)},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),t.updateFrom(this.mrow.getOuterBBox()),this.setChildPWidths(e)},e;function e(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(s,"__esModule",{value:!0}),s.CommonMmultiscriptsMixin=s.ScriptNames=s.NextScript=void 0,e(6469));s.NextScript={base:"subList",subList:"supList",supList:"subList",psubList:"psupList",psupList:"psubList"},s.ScriptNames=["sup","sup","psup","psub"],s.CommonMmultiscriptsMixin=function(t){return r(e,i=t),e.prototype.combinePrePost=function(t,e){t=new a.BBox(t);return t.combine(e,0,0),t},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r,n=this.font.params.scriptspace,o=this.scriptData,i=this.combinePrePost(o.sub,o.psub),a=this.combinePrePost(o.sup,o.psup),i=p(this.getUVQ(i,a),2),a=i[0],i=i[1];t.empty(),o.numPrescripts&&(t.combine(o.psup,n,a),t.combine(o.psub,n,i)),t.append(o.base),o.numScripts&&(r=t.w,t.combine(o.sup,r,a),t.combine(o.sub,r,i),t.w+=n),t.clean(),this.setChildPWidths(e)},e.prototype.getScriptData=function(){var t=this.scriptData={base:null,sub:a.BBox.empty(),sup:a.BBox.empty(),psub:a.BBox.empty(),psup:a.BBox.empty(),numPrescripts:0,numScripts:0},e=this.getScriptBBoxLists();this.combineBBoxLists(t.sub,t.sup,e.subList,e.supList),this.combineBBoxLists(t.psub,t.psup,e.psubList,e.psupList),t.base=e.base[0],t.numPrescripts=e.psubList.length,t.numScripts=e.subList.length},e.prototype.getScriptBBoxLists=function(){var e,t,r={base:[],subList:[],supList:[],psubList:[],psupList:[]},n="base";try{for(var o=l(this.childNodes),i=o.next();!i.done;i=o.next())var a=i.value,n=a.node.isKind("mprescripts")?"psubList":(r[n].push(a.getOuterBBox()),s.NextScript[n])}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return this.firstPrescript=r.subList.length+r.supList.length+2,this.padLists(r.subList,r.supList),this.padLists(r.psubList,r.psupList),r},e.prototype.padLists=function(t,e){t.length>e.length&&e.push(a.BBox.empty())},e.prototype.combineBBoxLists=function(t,e,r,n){for(var o=0;ot.h&&(t.h=s),i>t.d&&(t.d=i),u>e.h&&(e.h=u),l>e.d&&(e.d=l)}},e.prototype.getScaledWHD=function(t){var e=t.w,r=t.h,n=t.d,t=t.rscale;return[e*t,r*t,n*t]},e.prototype.getUVQ=function(t,e){var r,n,o;return this.UVQ||(r=(o=p([0,0,0],3))[0],n=o[1],o=o[2],0===t.h&&0===t.d?r=this.getU():0===e.h&&0===e.d?r=-this.getV():(r=(t=p(i.prototype.getUVQ.call(this,t,e),3))[0],n=t[1],o=t[2]),this.UVQ=[r,n,o]),this.UVQ},e;function e(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMoMixin=e.DirectionVH=void 0,r(6469)),l=r(505),c=r(5884);e.DirectionVH=((r={})[1]="v",r[2]="h",r),e.CommonMoMixin=function(t){return o(e,n=t),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1),this.protoBBox(t),this.node.attributes.get("symmetric")&&2!==this.stretch.dir&&(e=this.getCenterOffset(t),t.h+=e,t.d-=e),this.node.getProperty("mathaccent")&&(0===this.stretch.dir||0<=this.size)&&(t.w=0)},e.prototype.protoBBox=function(t){var e=0!==this.stretch.dir;e&&null===this.size&&this.getStretchedVariant([0]),e&&this.size<0||(n.prototype.computeBBox.call(this,t),this.copySkewIC(t))},e.prototype.getAccentOffset=function(){var t=a.BBox.empty();return this.protoBBox(t),-t.w/2},e.prototype.getCenterOffset=function(t){return(t=void 0===t?null:t)||(t=a.BBox.empty(),n.prototype.computeBBox.call(this,t)),(t.h+t.d)/2+this.font.params.axis_height-t.h},e.prototype.getVariant=function(){this.node.attributes.get("largeop")?this.variant=this.node.attributes.get("displaystyle")?"-largeop":"-smallop":this.node.attributes.getExplicit("mathvariant")||!1!==this.node.getProperty("pseudoscript")?n.prototype.getVariant.call(this):this.variant="-tex-variant"},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get("stretchy"))return!1;var e=this.getText();if(1!==Array.from(e).length)return!1;e=this.font.getDelimiter(e.codePointAt(0));return this.stretch=e&&e.dir===t?e:c.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var r,n;if(void 0===e&&(e=!1),0!==this.stretch.dir){var o=this.getWH(t),i=this.getSize("minsize",0),a=this.getSize("maxsize",1/0),s=this.node.getProperty("mathaccent"),o=Math.max(i,Math.min(a,o)),a=this.font.params.delimiterfactor/1e3,l=this.font.params.delimitershortfall,c=i||e?o:s?Math.min(o/a,o+l):Math.max(o*a,o-l),u=this.stretch,p=u.c||this.getText().codePointAt(0),h=0;if(u.sizes)try{for(var d=y(u.sizes),f=d.next();!f.done;f=d.next()){if(f.value>=c)return s&&h&&h--,this.variant=this.font.getSizeVariant(p,h),this.size=h,void(u.schar&&u.schar[h]&&(this.stretch=m(m({},this.stretch),{c:u.schar[h]})));h++}}catch(t){r={error:t}}finally{try{f&&!f.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}u.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,this.checkExtendedHeight(o,u),u)):(this.variant=this.font.getSizeVariant(p,h-1),this.size=h-1)}},e.prototype.getSize=function(t,e){var r=this.node.attributes;return e=r.isSet(t)?this.length2em(r.get(t),1,1):e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var t=s(t,2),e=t[0],t=t[1],r=this.font.params.axis_height;return this.node.attributes.get("symmetric")?2*Math.max(e-r,t+r):e+t},e.prototype.getStretchBBox=function(t,e,r){r.hasOwnProperty("min")&&r.min>e&&(e=r.min);var n=s(r.HDW,3),o=n[0],i=n[1],n=n[2];1===this.stretch.dir?(o=(t=s(this.getBaseline(t,e,r),2))[0],i=t[1]):n=e,this.bbox.h=o,this.bbox.d=i,this.bbox.w=n},e.prototype.getBaseline=function(t,e,r){var n=2===t.length&&t[0]+t[1]===e,o=this.node.attributes.get("symmetric"),t=s(n?t:[e,0],2),e=t[0],t=t[1],i=s([e+t,0],2),a=i[0],i=i[1];return i=o?(o=this.font.params.axis_height,(a=n?2*Math.max(e-o,t+o):a)/2-o):n?t:(o=(e=s(r.HDW||[.75,.25],2))[0],(n=e[1])*(a/(o+n))),[a-i,i]},e.prototype.checkExtendedHeight=function(t,e){var r;return e.fullExt&&(r=(e=s(e.fullExt,2))[0],t=(e=e[1])+Math.ceil(Math.max(0,t-e)/r)*r),t},e.prototype.remapChars=function(t){var e=this.node.getProperty("primes");return e?(0,l.unicodeChars)(e):(1===t.length&&(e=this.node.coreParent().parent,e=this.isAccent&&!e.isKind("mrow")?"accent":"mo",(e=this.font.getRemappedChar(e,t[0]))&&(t=this.unicodeChars(e,this.variant))),t)},e;function e(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonInferredMrowMixin=e.CommonMrowMixin=void 0,r(6469));e.CommonMrowMixin=function(t){return o(e,s=t),Object.defineProperty(e.prototype,"fixesPWidth",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.stretchChildren=function(){var t,e,r,n,o,i,a=[];try{for(var s=x(this.childNodes),l=s.next();!l.done;l=s.next())(S=l.value).canStretch(1)&&a.push(S)}catch(e){t={error:e}}finally{try{l&&!l.done&&(e=s.return)&&e.call(s)}finally{if(t)throw t.error}}var c=a.length,u=this.childNodes.length;if(c&&1p&&(p=g),(b*=v)>h&&(h=b))}}catch(t){r={error:t}}finally{try{m&&!m.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}try{for(var S,O=x(a),M=O.next();!M.done;M=O.next())(S=M.value).coreMO().getStretchedVariant([p,h])}catch(t){o={error:t}}finally{try{M&&!M.done&&(i=O.return)&&i.call(O)}finally{if(o)throw o.error}}}},e;function e(){for(var e,t,r=[],n=0;nthis.surdH?(t.h+t.d-(this.surdH-2*e-r/2))/2:e+r/4]},e.prototype.getRootDimens=function(t,e){return[0,0,0,0]},e;function e(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMtableMixin=void 0,r(6469)),l=r(505),u=r(7875);e.CommonMtableMixin=function(t){return i(e,o=t),Object.defineProperty(e.prototype,"tableRows",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.findContainer=function(){for(var t=this,e=t.parent;e&&(e.node.notParent||e.node.isKind("mrow"));)e=(t=e).parent;this.container=e,this.containerI=t.node.childPosition()},e.prototype.getPercentageWidth=function(){var t;this.hasLabels?this.bbox.pwidth=s.BBox.fullWidth:(t=this.node.attributes.get("width"),(0,l.isPercent)(t)&&(this.bbox.pwidth=t))},e.prototype.stretchRows=function(){for(var t=this.node.attributes.get("equalrows"),e=t?this.getEqualRowHeight():0,r=t?this.getTableData():{H:[0],D:[0]},n=r.H,o=r.D,i=this.tableRows,a=0;ao[r]&&(o[r]=c),u>i[r]&&(i[r]=u),s
a[e]&&(a[e]=l),s},e.prototype.extendHD=function(t,e,r,n){n=(n-(e[t]+r[t]))/2;n<1e-5||(e[t]+=n,r[t]+=n)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var e=this.getTableData(),r=e.H,e=e.D,r=(n=this.node.attributes.get("equalrows")?(n=this.getEqualRowHeight(),(0,u.sum)([].concat(this.rLines,this.rSpace))+n*this.numRows):(0,u.sum)(r.concat(e,this.rLines,this.rSpace)),n+=2*(this.fLine+this.fSpace[1]),this.getComputedWidths()),e=(0,u.sum)(r.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),r=this.node.attributes.get("width"),n=("auto"!==r&&(e=Math.max(this.length2em(r,0)+2*this.fLine,e)),p(this.getBBoxHD(n),2)),o=n[0],n=n[1],o=(t.h=o,t.d=n,t.w=e,p(this.getBBoxLR(),2)),n=o[0],e=o[1];t.L=n,t.R=e,(0,l.isPercent)(r)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,r){var n=this.node.attributes.get("width");if(!(0,l.isPercent)(n))return!1;this.hasLabels||(this.bbox.pwidth="",this.container.bbox.pwidth="");var o=this.bbox,i=o.w,a=o.L,o=o.R,s=this.node.attributes.get("data-width-includes-label"),n=Math.max(i,this.length2em(n,Math.max(e,a+i+o)))-(s?a+o:0),e=this.node.attributes.get("equalcolumns")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes("columnwidth",0),s=(this.cWidths=this.getColumnWidthsFixed(e,n),this.getComputedWidths());return this.pWidth=(0,u.sum)(s.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==i&&this.parent.invalidateBBox(),this.pWidth!==i},e.prototype.setColumnPWidths=function(){var t,e,r=this.cWidths;try{for(var n=_(this.pwidthCells),o=n.next();!o.done;o=n.next()){var i=p(o.value,2),a=i[0],s=i[1];a.setChildPWidths(!1,r[s])&&(a.invalidateBBox(),a.getBBox())}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.getBBoxHD=function(t){var e,r=p(this.getAlignmentRow(),2),n=r[0],r=r[1];if(null===r)return{top:[0,t],center:[e=t/2,e],bottom:[t,0],baseline:[e,e],axis:[e+(o=this.font.params.axis_height),e-o]}[n]||[e,e];var o=this.getVerticalPosition(r,n);return[o,t-o]},e.prototype.getBBoxLR=function(){var t,e,r,n;return this.hasLabels?(t=(n=this.node.attributes).get("side"),e=(r=p(this.getPadAlignShift(t),2))[0],r=r[1],(n=this.hasLabels&&!!n.get("data-width-includes-label"))&&this.frame&&this.fSpace[0]&&(e-=this.fSpace[0]),"center"!==r||n?"left"===t?[e,0]:[0,e]:[e,e]):[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get("minlabelspacing")),r=p(null==this.styles?["",""]:[this.styles.get("padding-left"),this.styles.get("padding-right")],2),n=r[0],r=r[1],n=((n||r)&&(e=Math.max(e,this.length2em(n||"0"),this.length2em(r||"0"))),p(this.getAlignShift(),2)),r=n[0],n=n[1];return[e,r,n=r===t?"left"===t?Math.max(e,n)-e:Math.min(-e,n)+e:n]},e.prototype.getAlignShift=function(){return this.isTop?o.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,r=t.D,t=Array.from(e.keys()).map(function(t){return e[t]+r[t]});return Math.max.apply(Math,t)},e.prototype.getComputedWidths=function(){var e=this,r=this.getTableData().W,t=Array.from(r.keys()).map(function(t){return("number"==typeof e.cWidths[t]?e.cWidths:r)[t]});return t=this.node.attributes.get("equalcolumns")?Array(t.length).fill((0,u.max)(t)):t},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get("width");if(this.node.attributes.get("equalcolumns"))return this.getEqualColumns(t);var e=this.getColumnAttributes("columnwidth",0);return"auto"===t?this.getColumnWidthsAuto(e):(0,l.isPercent)(t)?this.getColumnWidthsPercent(e):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,r=Math.max(1,this.numCols);return t="auto"===t?(e=this.getTableData().W,(0,u.max)(e)):(0,l.isPercent)(t)?this.percent(1/r):(e=(0,u.sum)([].concat(this.cLines,this.cSpace))+2*this.fSpace[0],Math.max(0,this.length2em(t)-e)/r),Array(this.numCols).fill(t)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map(function(t){return"auto"===t||"fit"===t?null:(0,l.isPercent)(t)?t:e.length2em(t)})},e.prototype.getColumnWidthsPercent=function(r){var n=this,o=0<=r.indexOf("fit"),i=(o?this.getTableData():{W:null}).W;return Array.from(r.keys()).map(function(t){var e=r[t];return"fit"===e?null:"auto"===e?o?i[t]:null:(0,l.isPercent)(e)?e:n.length2em(e)})},e.prototype.getColumnWidthsFixed=function(r,t){var n=this,e=Array.from(r.keys()),o=e.filter(function(t){return"fit"===r[t]}),i=e.filter(function(t){return"auto"===r[t]}),i=o.length||i.length,a=(i?this.getTableData():{W:null}).W,s=t-(0,u.sum)([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],l=s,c=(e.forEach(function(t){var e=r[t];l-="fit"===e||"auto"===e?a[t]:n.length2em(e,s)}),i&&0this.numRows?null:t-1]},e.prototype.getColumnAttributes=function(t,e){var r=this.numCols-(e=void 0===e?1:e),n=this.getAttributeArray(t);if(0===n.length)return null;for(;n.lengthr&&n.splice(r),n},e.prototype.getRowAttributes=function(t,e){var r=this.numRows-(e=void 0===e?1:e),n=this.getAttributeArray(t);if(0===n.length)return null;for(;n.lengthr&&n.splice(r),n},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?(0,l.split)(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var r=this;return void 0===e&&(e=1),t?t.map(function(t){return r.em(t/e)}):null},e.prototype.convertLengths=function(t){var e=this;return t?t.map(function(t){return e.length2em(t)}):null},e;function e(){for(var t=[],e=0;e=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMlabeledtrMixin=e.CommonMtrMixin=void 0,e.CommonMtrMixin=function(t){return o(e,r=t),Object.defineProperty(e.prototype,"fixesPWidth",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"numCells",{get:function(){return this.childNodes.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"labeled",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tableCells",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map(function(t){return t.getBBox()})},e.prototype.stretchChildren=function(t){void 0===t&&(t=null);var e,r,n,o,i=[],a=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var s=M(a),l=s.next();!l.done;l=s.next())(_=l.value.childNodes[0]).canStretch(1)&&i.push(_)}catch(t){u={error:t}}finally{try{l&&!l.done&&(c=s.return)&&c.call(s)}finally{if(u)throw u.error}}var c=i.length,u=this.childNodes.length;if(c&&1=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=(Object.defineProperty(e,"__esModule",{value:!0}),e.CommonScriptbaseMixin=void 0,r(9007));e.CommonScriptbaseMixin=function(t){var o;return i(e,o=t),Object.defineProperty(e.prototype,"baseChild",{get:function(){return this.childNodes[this.node.base]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scriptChild",{get:function(){return this.childNodes[1]},enumerable:!1,configurable:!0}),e.prototype.getBaseCore=function(){for(var t=this.getSemanticBase()||this.childNodes[0];t&&(1===t.childNodes.length&&(t.node.isKind("mrow")||t.node.isKind("TeXAtom")&&t.node.texClass!==a.TEXCLASS.VCENTER||t.node.isKind("mstyle")||t.node.isKind("mpadded")||t.node.isKind("mphantom")||t.node.isKind("semantics"))||t.node.isKind("munderover")&&t.isMathAccent);)this.setBaseAccentsFor(t),t=t.childNodes[0];return t||(this.baseHasAccentOver=this.baseHasAccentUnder=!1),t||this.childNodes[0]},e.prototype.setBaseAccentsFor=function(t){t.node.isKind("munderover")&&(null===this.baseHasAccentOver&&(this.baseHasAccentOver=!!t.node.attributes.get("accent")),null===this.baseHasAccentUnder&&(this.baseHasAccentUnder=!!t.node.attributes.get("accentunder")))},e.prototype.getSemanticBase=function(){var t=this.node.attributes.getExplicit("data-semantic-fencepointer");return this.getBaseFence(this.baseChild,t)},e.prototype.getBaseFence=function(t,e){var r,n;if(!t||!t.node.attributes||!e)return null;if(t.node.attributes.getExplicit("data-semantic-id")===e)return t;try{for(var o=O(t.childNodes),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.getBaseFence(a,e);if(s)return s}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return null},e.prototype.getBaseScale=function(){for(var t=this.baseCore,e=1;t&&t!==this;)e*=t.getOuterBBox().rscale,t=t.parent;return e},e.prototype.getBaseIc=function(){return this.baseCore.getOuterBBox().ic*this.baseScale},e.prototype.getAdjustedIc=function(){var t=this.baseCore.getOuterBBox();return(t.ic?1.05*t.ic+.05:0)*this.baseScale},e.prototype.isCharBase=function(){var t=this.baseCore;return(t.node.isKind("mo")&&null===t.size||t.node.isKind("mi")||t.node.isKind("mn"))&&1===t.bbox.rscale&&1===Array.from(t.getText()).length},e.prototype.checkLineAccents=function(){this.node.isKind("munderover")&&(this.node.isKind("mover")?this.isLineAbove=this.isLineAccent(this.scriptChild):this.node.isKind("munder")?this.isLineBelow=this.isLineAccent(this.scriptChild):(this.isLineAbove=this.isLineAccent(this.overChild),this.isLineBelow=this.isLineAccent(this.underChild)))},e.prototype.isLineAccent=function(t){t=t.coreMO().node;return t.isToken&&"―"===t.getText()},e.prototype.getBaseWidth=function(){var t=this.baseChild.getOuterBBox();return t.w*t.rscale-(this.baseRemoveIc?this.baseIc:0)+this.font.params.extra_ic},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.getBaseWidth(),n=y(this.getOffset(),2),o=n[0],n=n[1];t.append(this.baseChild.getOuterBBox()),t.combine(this.scriptChild.getOuterBBox(),r+o,n),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getOffset=function(){return[0,0]},e.prototype.baseCharZero=function(t){var e=!!this.baseCore.node.attributes.get("largeop"),r=this.baseScale;return this.baseIsChar&&!e&&1===r?0:t},e.prototype.getV=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,n=this.length2em(this.node.attributes.get("subscriptshift"),r.sub1);return Math.max(this.baseCharZero(t.d*this.baseScale+r.sub_drop*e.rscale),n,e.h*e.rscale-.8*r.x_height)},e.prototype.getU=function(){var t=this.baseCore.getOuterBBox(),e=this.scriptChild.getOuterBBox(),r=this.font.params,n=this.node.attributes.getList("displaystyle","superscriptshift"),o=this.node.getProperty("texprimestyle")?r.sup3:n.displaystyle?r.sup1:r.sup2,n=this.length2em(n.superscriptshift,o);return Math.max(this.baseCharZero(t.h*this.baseScale-r.sup_drop*e.rscale),n,e.d*e.rscale+.25*r.x_height)},e.prototype.hasMovableLimits=function(){var t=this.node.attributes.get("displaystyle"),e=this.baseChild.coreMO().node;return!t&&!!e.attributes.get("movablelimits")},e.prototype.getOverKU=function(t,e){var r=this.node.attributes.get("accent"),n=this.font.params,e=e.d*e.rscale,o=n.rule_thickness*n.separation_factor,i=this.baseHasAccentOver?o:0,o=this.isLineAbove?3*n.rule_thickness:o,r=(r?o:Math.max(n.big_op_spacing1,n.big_op_spacing3-Math.max(0,e)))-i;return[r,t.h*t.rscale+r+e]},e.prototype.getUnderKV=function(t,e){var r=this.node.attributes.get("accentunder"),n=this.font.params,e=e.h*e.rscale,o=n.rule_thickness*n.separation_factor,i=this.baseHasAccentUnder?o:0,o=this.isLineBelow?3*n.rule_thickness:o,r=(r?o:Math.max(n.big_op_spacing2,n.big_op_spacing4-e))-i;return[r,-(t.d*t.rscale+r+e)]},e.prototype.getDeltaW=function(e,t){void 0===t&&(t=[0,0,0]);var r,n,o,i,a=this.node.attributes.get("align"),s=e.map(function(t){return t.w*t.rscale}),l=(s[0]-=this.baseRemoveIc&&!this.baseCore.node.attributes.get("largeop")?this.baseIc:0,Math.max.apply(Math,g([],y(s),!1))),c=[],u=0;try{for(var p=O(s.keys()),h=p.next();!h.done;h=p.next()){var d=h.value;c[d]=("center"===a?(l-s[d])/2:"right"===a?l-s[d]:0)+t[d],c[d]=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||0=t.length?void 0:t)&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},i=(Object.defineProperty(e,"__esModule",{value:!0}),e.Menu=void 0,r(5713)),c=r(4474),a=r(9515),s=r(7233),l=r(5865),p=r(473),h=r(4414),d=r(4922),f=r(6914),m=r(3463),y=r(7309),g=o(r(5445)),b=a.MathJax,v="undefined"!=typeof window&&window.navigator&&"Mac"===window.navigator.platform.substr(0,3);function _(t,e){void 0===e&&(e={});var r=this;this.settings=null,this.defaultSettings=null,this.menu=null,this.MmlVisitor=new p.MmlVisitor,this.jax={CHTML:null,SVG:null},this.rerenderStart=c.STATE.LAST,this.about=new d.Info('MathJax v'+i.mathjax.version,function(){var t=[];return t.push("Input Jax: "+r.document.inputJax.map(function(t){return t.name}).join(", ")),t.push("Output Jax: "+r.document.outputJax.name),t.push("Document Type: "+r.document.kind),t.join(" ")},'www.mathjax.org'),this.help=new d.Info("MathJax Help",function(){return["
MathJax is a JavaScript library that allows page"," authors to include mathematics within their web pages."," As a reader, you don't need to do anything to make that happen.
","
Browsers: MathJax works with all modern browsers including"," Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.
","
Math Menu: MathJax adds a contextual menu to equations."," Right-click or CTRL-click on any mathematics to access the menu.
",'
',"
Show Math As: These options allow you to view the formula's"," source markup (as MathML or in its original format).
","
Copy to Clipboard: These options copy the formula's source markup,"," as MathML or in its original format, to the clipboard"," (in browsers that support that).
","
Math Settings: These give you control over features of MathJax,"," such the size of the mathematics, and the mechanism used"," to display equations.
","
Accessibility: MathJax can work with screen"," readers to make mathematics accessible to the visually impaired."," Turn on the explorer to enable generation of speech strings"," and the ability to investigate expressions interactively.
","
Language: This menu lets you select the language used by MathJax"," for its menus and warning messages. (Not yet implemented in version 3.)
","
","
Math Zoom: If you are having difficulty reading an"," equation, MathJax can enlarge it to help you see it better, or"," you can scall all the math on the page to make it larger."," Turn these features on in the Math Settings menu.
","
Preferences: MathJax uses your browser's localStorage database"," to save the preferences set via this menu locally in your browser. These"," are not used to track you, and are not transferred or used remotely by"," MathJax in any way.