diff --git a/.Rbuildignore b/.Rbuildignore index b4e86403..9b6ce103 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -11,3 +11,6 @@ LICENSE .github/ cran-comments.md ^CRAN-SUBMISSION$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ diff --git a/Clarity.txt b/Clarity.txt new file mode 100644 index 00000000..56b9166a --- /dev/null +++ b/Clarity.txt @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index 399f86c3..d3b39d6f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -18,7 +18,7 @@ Description: Animal abundance estimation via conventional, multiple covariate fitting is performed via maximum likelihood. Also included are diagnostics and plotting for fitted detection functions. Abundance estimation is via a Horvitz-Thompson-like estimator. -Version: 3.0.0 +Version: 3.0.0.9000 URL: https://github.com/DistanceDevelopment/mrds/ BugReports: https://github.com/DistanceDevelopment/mrds/issues Depends: @@ -31,6 +31,7 @@ Imports: nloptr, Rsolnp Suggests: + Distance, testthat, covr, knitr, diff --git a/NEWS b/NEWS.md similarity index 72% rename from NEWS rename to NEWS.md index ef380bd0..c392ef72 100644 --- a/NEWS +++ b/NEWS.md @@ -1,5 +1,4 @@ -mrds 3.0.0 ----------- +# mrds 3.0.0 New features @@ -10,9 +9,7 @@ Bug Fixes * The summary of the fitting object now correctly prints the optimiser used when monotonicity is enforced ('slsqp' or 'solnp'). * check.mono() now uses the same point locations as the optimiser. It also uses the same tolerance as the optimiser (1e-8) and applies this tolerance when checking (strict) monotonicity, and when checking 0 <= g(x) <= 1. - -mrds 2.3.0 ----------- +# mrds 2.3.0 New Features @@ -24,12 +21,11 @@ Bug Fixes * Ensure that the MCDS optimizer is not used for double observer models as this was generating errors. (Issue #89) * Improved the documentation on initial values, lower and upper bounds in both the ddf and mrds_opt documentation (mrds_opt was renamed from mrds-opt which was not accessible via ?mrds-opt). (Issue #90) -mrds 2.2.9 ----------- +# mrds 2.2.9 New Features -* Users can now download the fortran MCDS.exe optimiser used in Distance for Windows and fit single observer models with both the optimisers in R via mrds and also MCDS.exe. For some datasets the optimisation with MCDS.exe is superior (giving a better likelihood) than the optimiser in R used with mrds. See ?MCDS for more details. +* Users can now download the fortran MCDS.exe optimiser used in Distance for Windows and fit single observer models with both the optimisers in R via # mrds and also MCDS.exe. For some datasets the optimisation with MCDS.exe is superior (giving a better likelihood) than the optimiser in R used with mrds. See ?MCDS for more details. Bug Fixes @@ -38,8 +34,7 @@ Bug Fixes * Fix bug when a uniform model was fitted with no adjustments. This caused an error when looking for the hessian. It also required that the covariance set to 0 when estimating the cluster size standard errors (Issue #79). * fix bug with using binned data via cutpoints for prediction (#73) -mrds 2.2.8 ----------- +# mrds 2.2.8 * Fix bug where plotting rem.fi models when truncation was used would lead to an error being thrown. (#58) * Fix bugs when a uniform is fitted with no adjustments (#59) @@ -51,8 +46,7 @@ mrds 2.2.8 * Make dht output tables consistent. Now always refers to Region in the display (rather than Region in summary and Label in N/D tables). Note this is only a display change so won't break code which looks to extract these values based on column names from the dht object which is unchanged. * Fixed bug leading to erroneous zero totals in individuals N/D tables when there were no sightings in one or more strata. Bug was apparent when the data were sightings of clusters and the varflag 1 option (er_method = 1 in Distance ds function) was selected in the dht function. -mrds 2.2.7 ----------- +# mrds 2.2.7 * Fix bug in check for # parameters < # data. Thanks to Anne Provencher St-Pierre. * No longer display errors caused by solnp/gosolnp when doing constrained optimisation, these can be seen when showit>0 if necessary. @@ -61,20 +55,18 @@ mrds 2.2.7 * Expected.S element of dht return now a data.frame not a list * Fix total encounter rate and its variance in stratified analysis -mrds 2.2.6 ----------- +# mrds 2.2.6 * Individuals summary table for dht now includes k (number of transects) * Add effective detection radius (EDR) and its uncertainty to summary output * Change default rounding of chi-squared test tables. This can be customized using print(ddf.gof(...), digits=?) for e.g., printing with knitr::kable * New detection function: two-part normal ("tpn"), useful for aerial surveys in mountainous terrain, see Becker EF, Christ AM (2015) A Unimodal Model for Double Observer Distance Sampling Surveys. PLOS ONE 10(8): e0136403. https://doi.org/10.1371/journal.pone.0136403 and ?"two-part-normal". -* To improve consistency in functions and arguments in the package, some functions will change from . separation to _. For now both versions exist but will be removed in mrds 2.2.7. +* To improve consistency in functions and arguments in the package, some functions will change from . separation to _. For now both versions exist but will be removed in # mrds 2.2.7. - add_df_covar_line -> add.df.covar.line - p_dist_table -> p.dist.table * Variable strip widths are now supported in dht. Users should supply an additional column to the sample data.frame ("CoveredArea") giving the total area covered in the given transect and set options=list(areas.supplied=TRUE). Thanks to Megan Ferguson for providing an example, code and feedback. -mrds 2.2.5 ----------- +# mrds 2.2.5 * use "probabalists" definition of Hermite polynomials, as from Distance. More numerically stable * remove setting of Hermite parameter to 1 (unclear why this was the case!) @@ -93,30 +85,26 @@ mrds 2.2.5 * errors now thrown when more parameters than data (either unique distance values or bins) -mrds 2.2.4 ----------- +# mrds 2.2.4 * add_df_covar_line now plots probability density functions for the point transect case * warning is no longer raised when truncation is not set but bins are specified for binned data (it's assumed that the furthest cutpoint is the truncation) * AIC/logLik functions now work for all methods -mrds 2.2.3 ----------- +# mrds 2.2.3 * fix bug where region areas were not duplicated properly when density was estimated (using Area=0 in data) * fix a bug in getting starting values for hazard-rate detection functions when point transect data is used * fix issue with left truncation when estimating abundance/density in dht -mrds 2.2.2 ----------- +# mrds 2.2.2 * fix issue in predict() when uniform key functions are used with new data. * new function p_dist_table() to show the distribution of estimated probabilities of detection. Useful for covariate models to determine issues with very small ps. * new function add_df_covar_line(), which can be used to add lines plots showing the detection function for a given covariate combination. Thanks to various members of the distance sampling mailing list for this suggestion. * plots produced by plot.ds/plot.rem/plot.rem.fi/plot.trial/plot.trial.fi/plot.io/plot.io.fi/plot.det.tables now use same defaults as R 4.0.0 ("lightgrey" bars for histograms). Some deprecated arguments to plot.ds were removed. -mrds 2.2.1 ----------- +# mrds 2.2.1 * hessian now returned when solnp (constrained optimisation) is used to fit the detection function * Check for NA covariate values, thanks to Ana Cañadas for highlighting this issue. @@ -126,16 +114,14 @@ mrds 2.2.1 * Fixed a bug in dht when left truncation is used. Previously left truncation was ignored. See https://github.com/DistanceDevelopment/mrds/issues/22 thanks to Carl Schwarz for finding this bug. * Fix bug where two objects could have a missing observer and no error was thrown. Thanks to Ainars Aunins for reporting this bug and Eric Rexstad for diagnosing. -mrds 2.2.0 ------------ +# mrds 2.2.0 * fixed bug in calculation of Kolmogorov-Smirnov p-values. Previous methods did not take into account that parameters of the detection function were estimated, so a new bootstrap-based approach has been implemented. As this is time-consuming, the Kolmogorov-Smirnov test is no longer performed by default (use ks=TRUE to get the test). -* Encounter rate variance for point transects when points were not all sampled an equal number of times was incorrect. mrds now uses the P3 estimator from Fewster et al (2009) for point transect encounter rate variance. -* Bug in predicting when left truncation is used. Previously if the distance column in the new data was set to zero and left truncation was > 0 predictions were discarded, this was particularly problematic for io, etc MRDS models. Thanks to Natalie Kelly for spotting this and suggesting a fix. +* Encounter rate variance for point transects when points were not all sampled an equal number of times was incorrect. # mrds now uses the P3 estimator from Fewster et al (2009) for point transect encounter rate variance. +* Bug in predicting when left truncation is used. Previously if the distance column in the new data was set to zero and left truncation was > 0 predictions were discarded, this was particularly problematic for io, etc # mrds models. Thanks to Natalie Kelly for spotting this and suggesting a fix. * Add errors when "P3" is used as an encounter rate variance estimator with non-point transect data, throws a warning and switches to P3 for points when it's not specified. -mrds 2.1.18 ------------ +# mrds 2.1.18 * fixed bug in parameter rescaling where scales were incorrectly entered as 1 due to an indexing bug * Quantile-quantile plots now use an aspect ratio of 1 @@ -144,23 +130,20 @@ mrds 2.1.18 * Correctly specify distbegin/distend for predictions with binned data, thanks to Jason Roberts for spotting this bug. * Let the user know that int.range was set in summary() results -mrds 2.1.17 ------------ +# mrds 2.1.17 * fixed starting value bug for hazard-rate models when distances are binned. Thanks to Natalia Schroeder and Eric Rexstad for discovering this. * predict.ds now uses numerical integration to calculate integrals (rather than an approximation). Thanks to Eric Rexstad for spotting an issue with goodness of fit testing that highlighted this. * plot.ds() now accepts an xlab="" argument to change the x axis label. Thanks to Steve Ahlswede for suggesting this. -mrds 2.1.16 ------------ +# mrds 2.1.16 * improved predict() method now does the Right Thing with factors * Fixed bug in scaling of histograms for point transect pdf plots and points on those plots. Thanks to Erics Howe and Rexstad for reporting these issues. * You can now set y axis limits when using plot.ds, defaults should be more sensible for pt+point models. Thanks to Eric Howe for the suggestion. * Fixed bug when setting initial values that threw many errors. Thanks to Laura Marshall for spotting this. -mrds 2.1.15 ------------ +# mrds 2.1.15 * rescaling parameters were not correct, now fixed. Thanks to Laura Marshall for spotting this. * coefficients are called coefficients (not a mixture of coefficients and parameters) in summary() results @@ -169,194 +152,170 @@ mrds 2.1.15 * assign.par, create.ddfobj and detfct are now exported, so it can be used by dsm (though shouldn't be used by anything else!) * fixed bug in left truncation where probability of detection was not calculated correctly. Thanks to Jason Roberts for pointing this out! -mrds 2.1.14 ------------ - - * updated initialvalues calculation for hazard-rate -- now uses Beavers & Ramsay method to scale parameters for hazard-rate - * automatic parameter rescaling for covariate models when covariates are poorly scaled. Now default for nlminb method - * minor speed-up to logistic code when distance is a covariate - +# mrds 2.1.14 -mrds 2.1.13 ------------ +* updated initialvalues calculation for hazard-rate -- now uses Beavers & Ramsay method to scale parameters for hazard-rate +* automatic parameter rescaling for covariate models when covariates are poorly scaled. Now default for nlminb method +* minor speed-up to logistic code when distance is a covariate - * link to distance sampling Google Groups in help - * duplicate non-convergence warning/error removed - * warning of singular Hessian is now a warning() - * re-wrote the debug output to be easier to read - * dht now has an option (ci.width) to specify confidence interval width in output (thanks to David Pavlacky for the suggestion) - * monotonicity now operates over left->right truncation for models that are left truncated and will fail with an error message if many integration intervals are used. Thanks to Tiago Marques for highlighting this issue. -mrds 2.1.12 ------------ +# mrds 2.1.13 - * \donttest{} examples are now \dontrun{}. +* link to distance sampling Google Groups in help +* duplicate non-convergence warning/error removed +* warning of singular Hessian is now a warning() +* re-wrote the debug output to be easier to read +* dht now has an option (ci.width) to specify confidence interval width in output (thanks to David Pavlacky for the suggestion) +* monotonicity now operates over left->right truncation for models that are left truncated and will fail with an error message if many integration intervals are used. Thanks to Tiago Marques for highlighting this issue. -mrds 2.1.11 ------------ +# mrds 2.1.12 - * Bug in unif+cos(1) models when using monotonicity constraints and randomised starting points. Since the model only has 1 parameter, there is a bug in selecting columns in Rsolnp starting value code that makes the result be a vector, which then doesn't work with an apply later. Workaround of not using randomised starting values in mrds for that model. Thanks to Nathalie Cavada for finding this bug. +* \donttest{} examples are now \dontrun{}. - * Fixed bug in pdot.dsr.integrate.logistic which was giving incorrect AIC values for FI models with binned data for points or lines. +# mrds 2.1.11 - * Fixed issue where returned optimisation obejct got accessed without being checked to see if it's result was an error, causing problems when encapsulating ddf in other functions. +* Bug in unif+cos(1) models when using monotonicity constraints and randomised starting points. Since the model only has 1 parameter, there is a bug in selecting columns in Rsolnp starting value code that makes the result be a vector, which then doesn't work with an apply later. Workaround of not using randomised starting values in # mrds for that model. Thanks to Nathalie Cavada for finding this bug. +* Fixed bug in pdot.dsr.integrate.logistic which was giving incorrect AIC values for FI models with binned data for points or lines. +* Fixed issue where returned optimisation obejct got accessed without being checked to see if it's result was an error, causing problems when encapsulating ddf in other functions. -mrds 2.1.10 ------------ +# mrds 2.1.10 - * added testing directory to .Rbuildignore, tests are now not included in built packages and are not run on CRAN. For tests use the source packages on github. +* added testing directory to .Rbuildignore, tests are now not included in built packages and are not run on CRAN. For tests use the source packages on github. -mrds 2.1.9 ----------- +# mrds 2.1.9 BUG FIXES - * removed test that failed on CRAN's testing -mrds 2.1.8 ----------- +* removed test that failed on CRAN's testing + +# mrds 2.1.8 CHANGES - * removed doeachint/cgftab code, which used a spline approximation to the effective strip width/effective area when a half-normal detection function was used. This has been replaced with exact calculation via the error function (erf). - * tests updated accordingly - * monotonically constrained models now use a bunch of random start points -- uses gosolnp() from Rsolnp - * re-fitting by jiggling parameters refined to multiply by a uniform variable with limits set as the upper and lower bounds (+/-1) so jiggling can go either way, on approximately the same scale as the parameters - * corrected documentation for predict methods, which incorrectly stated what is returned for point transect models. Thanks to Thibault Dieuleveut for spotting this. +* removed doeachint/cgftab code, which used a spline approximation to the effective strip width/effective area when a half-normal detection function was used. This has been replaced with exact calculation via the error function (erf). +* tests updated accordingly +* monotonically constrained models now use a bunch of random start points -- uses gosolnp() from Rsolnp +* re-fitting by jiggling parameters refined to multiply by a uniform variable with limits set as the upper and lower bounds (+/-1) so jiggling can go either way, on approximately the same scale as the parameters +* corrected documentation for predict methods, which incorrectly stated what is returned for point transect models. Thanks to Thibault Dieuleveut for spotting this. BUG FIXES * fixed 2 bugs in create.varstructure; the first was for removal method which was being treated as a trial method. The second was when obs.table was not specified (Region and sample labels in dataframe for each obs) and there was dual observers. In that case it was doubling the number of observations. * fixed a bug in dht.deriv which had not been setup for removal; thanks to John Boulanger for noticing and reporting both of these bugs -mrds 2.1.7 ----------- +# mrds 2.1.7 BUG FIXES - * Standardisation was being applied to detection functions (such that g(0)=1) when there were no adjustments (which is uneccesary) but also caused issues when using gamma detection functions as this should be calculated at g(apex) instead. Standardisation code has been removed for when there are no adjustments and the correct scaling used for the gamma when there are. Thanks to Thomas Doniol-Valcroze for alerting us to this bug. - * Partial name-matching in dht was fixed. Produced warning but not error. +* Standardisation was being applied to detection functions (such that g(0)=1) when there were no adjustments (which is uneccesary) but also caused issues when using gamma detection functions as this should be calculated at g(apex) instead. Standardisation code has been removed for when there are no adjustments and the correct scaling used for the gamma when there are. Thanks to Thomas Doniol-Valcroze for alerting us to this bug. +* Partial name-matching in dht was fixed. Produced warning but not error. NEW FEATURES - * Tests for gamma detection functions - * Observations are automatically ordered by object and observer fields (if included) in ddf as expected by double observer analysis. A erroneous error message can be created if they are not ordered correctly or worse. Thanks to Ainars Aunins for bringing this to our attention. - * Added function create_document() which will run a shiny application interface to mrds and will create a knitr document from a template. The template currently is only for a single observer analysis and is behind on all of the features for the app which is fairly complete. - +* Tests for gamma detection functions +* Observations are automatically ordered by object and observer fields (if included) in ddf as expected by double observer analysis. A erroneous error message can be created if they are not ordered correctly or worse. Thanks to Ainars Aunins for bringing this to our attention. +* Added function create_document() which will run a shiny application interface to # mrds and will create a knitr document from a template. The template currently is only for a single observer analysis and is behind on all of the features for the app which is fairly complete. -mrds 2.1.6 ----------- +# mrds 2.1.6 BUG FIXES - * some key+adjustment models failed to converge due to bugs in the optimisation code (mainly unif+cosine models) + +* some key+adjustment models failed to converge due to bugs in the optimisation code (mainly unif+cosine models) NEW FEATURES - * optimisation tips help page at ?"mrds-opt" +* optimisation tips help page at ?"mrds-opt" -mrds 2.1.5 ------------- +# mrds 2.1.5 CHANGES - * models with both adjustment terms and covariates are now allowed - * mono.check function checks that a detection function is monotonic over its range (at the observed covariate combinations if covariates are included) +* models with both adjustment terms and covariates are now allowed +* mono.check function checks that a detection function is monotonic over its range (at the observed covariate combinations if covariates are included) - - -mrds 2.1.4-5 ------------- +# mrds 2.1.4-5 CHANGES - * new testthat changes test locations etc, this has been sorted out. - * which= argument in plot.* now sorts the which first, so plots will always be in order - * plot.ds is now more friendly to par() users, thanks to Jason Roberts for the pointer +* new `testthat` changes test locations etc, this has been sorted out. +* which= argument in plot.* now sorts the which first, so plots will always be in order +* plot.ds is now more friendly to par() users, thanks to Jason Roberts for the pointer BUG FIXES - * uniform+cosine detection functions were ignored when using monotonicity constraints, now they can be used together - * mono.strict=TRUE didn't automatically turn on mono=TRUE, extra logic to correct this - * montonicity constraints did not use standardised (g(x)/g(0) detection functions, so if g(x)>1 monotonicity constraints were voilated. Now standardised detection functions are used. Thanks to Len Thomas for noticing this bug. - +* uniform+cosine detection functions were ignored when using monotonicity constraints, now they can be used together +* mono.strict=TRUE didn't automatically turn on mono=TRUE, extra logic to correct this +* montonicity constraints did not use standardised (g(x)/g(0) detection functions, so if g(x)>1 monotonicity constraints were voilated. Now standardised detection functions are used. Thanks to Len Thomas for noticing this bug. - -mrds 2.1.4-3 ------------- +# mrds 2.1.4-3 BUG FIX - * predict.io.fi did not work for new data (thanks to Len Thomas and Phil Hammond for pointing this out) +* predict.io.fi did not work for new data (thanks to Len Thomas and Phil Hammond for pointing this out) CHANGES - * general documentation updates - * simplication and re-structuring of internals +* general documentation updates +* simplication and re-structuring of internals + +# mrds 2.1.4-3 -mrds 2.1.4-3 ------------- CHANGES - * internal re-structuring of summary methods - * more tests +* internal re-structuring of summary methods +* more tests + +# mrds 2.1.4-2 -mrds 2.1.4-2 ------------- CHANGES - * plot.ds now has a new argument, if TRUE (default) it will create a new window for each plot. - * general janitorial work inside plotting methods, removing and simplifying old code; (hopefully) no new features. +* plot.ds now has a new argument, if TRUE (default) it will create a new window for each plot. +* general janitorial work inside plotting methods, removing and simplifying old code; (hopefully) no new features. + +# mrds 2.1.4-1 -mrds 2.1.4-1 ------------- CHANGES - * Warning now issued when truncation is set to the largest distance by default. - - * updated dht documentation +* Warning now issued when truncation is set to the largest distance by default. +* updated dht documentation + +# mrds 2.1.4 -mrds 2.1.4 ----------- CHANGES * modified det.tables and plot.det.tables so it does not create and plot some tables depending on observer configuration (io,trial,removal). - * to plot functions (other than plot.ds) added argument subtitle=TRUE (default). It can be either TRUE, FALSE. If TRUE it shows sub-titles for plot type. If FALSE, no subtitles are shown. With this argument it is possible to get subtitles without main title. - * set iterlimit=1 in call to rem.glm from ddf.rem.fi to prevent convergence issues in getting starting values. +* created average.line.cond and it is now used in place of calcp.# mrds which was computing average line for conditional detection function by weighting values by estimated population proportions for each covariate value. It is now weighted by sample proportions (mean value). -* created average.line.cond and it is now used in place of calcp.mrds which was computing average line for conditional detection function by weighting values by estimated population proportions for each covariate value. It is now weighted by sample proportions (mean value). +# mrds 2.1.3-1 -mrds 2.1.3-1 ----------- BUG FIXES * patched dht.se so if vc1=NA it will not fail - * patched plot.ds to only issue dev.new when not using another graphics device so it plays nice with Distance. -mrds 2.1.3 ----------- +# mrds 2.1.3 + BUG FIXES * patched bug in dht which was returning incorrect values in bysample for sample.area and Dhat. - * patched code in dht.se so it would skip over variance component for p when key=unif and p=1. CHANGES * modified code in detfct.fit.opt and io and rem functions to adapt to changes in optimx - * removed old depends statements to optimx and Rsolnp; uses import -mrds 2.1.2 ------------- +# mrds 2.1.2 + BUG FIXES * fixed usage and example lines that were too long -mrds 2.1.1 ------------- +# mrds 2.1.1 + BUG FIXES * for full independence methods, the calculation for the distance sampling component was for unbinned data only. Code has been added to compute this component correctly for binned data. This required changes to each of the ddf.x.fi routines and for the logistic integration routines. @@ -364,26 +323,23 @@ BUG FIXES CHANGES * Modified flpt.lnl code to set integrals to 1E-25 if <=0 - * In integrate.pdf a vector argument for the integration range is converted to matrix if of length 2. - * ddf.gof will now use breaks set for binned data unless others are specified. NEW FEATURES * Added threshold detection functions ("th1" and "th2") which required some minor changes in other functions for summary/print. - * Added xlab and ylab arguments to plot functions to over-ride default labels -mrds 2.1.0 ------------- +# mrds 2.1.0 + CHANGES * Modified DESCRIPTION so only R 2.15 or greater is allowed. Needed for optimHess jll(12/10/2012) -mrds 2.0.9 ------------- +# mrds 2.0.9 + NEW FEATURES * New option plot=TRUE/FALSE in qqplot.ddf(), for when you only want the K-S and CvM test statistics, not plotting. dlm(11/13/2012) @@ -392,67 +348,48 @@ BUG FIXES * Fixed problem when obs dataframe in call to dht (which links observations to samples and regions) contained fields also in observation dataframe. Now only fields needed from obs are selected before merge. dlm(11/13/2012) -mrds 2.0.8 ------------- +# mrds 2.0.8 + * Unchanged version sent out with Distance in summer 2012 -mrds 2.0.7 ------------- +# mrds 2.0.7 NEW FEATURES * Restructured likelihood/integration code for fitting ds models - * Adjustment functions will now work with binned data. Code was added to assure that fields distbegin and distend are available if binned=TRUE and breaks are set as well. - * Added argument adj.exp which if set to TRUE will use key*exp(adj) rather than key*adj to keep f(x)>0 - * Added following restrictions for adjustments: if uniform key, adj.scale must be "width"; if non-uniform key and adj.scale="width", doeachint set to TRUE because scale integration will not work. - * Changed code in several functions so a uniform key with no adjustment functions could be used. - * New option plot=TRUE/FALSE in qqplot.ddf(), for when you only want the K-S and CvM test statistics, not plotting. BUG FIXES * Fixed inconsistencies in use and documentation of showit argument - * Fixed a bug where groups were not recognised in dht() when the size column occurred in both model data and observation table. (Thanks to Darren Kidney for spotting this.) -mrds 2.0.6 ------------- +# mrds 2.0.6 NEW FEATURES * Example code for binned point count data added to help for ddf - * Modified ddf.rem.fi and ddf.io.fi to use starting values from iterative offset glm to make optimization more robust - * Added a restriction so no one attempts fitting adjustment functions with covariates. - * Added some code to assure all of the necessary fields are available for binned data (binned=TRUE). - BUG FIXES * Patched create.ddfobj so that point counts with binned data would work properly - * Patched ddf.ds such that stored data in object$data has detected=1 - * Patched ddf.io.fi to throw an error when optimx() does not converge - * Patched ddf.io.fi and ddf.rem.fi so inclusion of factor(observer) will work in formula - * Patched dht, dht.se and covered.region.dht so it would handle 0 observations - * Suppress package messages from optimx - * Patched fpt.lnl, flt.lnl, print.ddf, model.description, summary.ds, print.summary.ds and coef.io, coef.trial, coef.rem, plot.io, plot.trial, and plot.rem to handle uniform key function. -mrds 2.0.5 ------------- +# mrds 2.0.5 NEW FEATURES @@ -461,22 +398,17 @@ NEW FEATURES BUG FIXES * Fixed code in dht.se such that it uses sample size from detection model in Satterthwaite approximation rather than size of selected subset of observations. - * Fixed coef functions so they would return parameter estimates for adjustment functions if any. -mrds 2.0.4 ------------- +# mrds 2.0.4 BUG FIXES * Changed flt.var to compute variance of average p correctly for point transects. - * Numerous changes by dlm to optimization code - * Changes to documentation to remove non-ASCII characters -mrds 2.0.3 ------------ +# mrds 2.0.3 NEW FEATURES @@ -485,11 +417,9 @@ NEW FEATURES BUG FIXES * Changes to det.tables and gof functions to use include.lowest=TRUE in calls to cut function - * Changed all usage of T and F to TRUE and FALSE -mrds 2.0.2 ------------ +# mrds 2.0.2 * For changes in 2.0.2 and earlier see ONEWS diff --git a/R/flnl.grad.R b/R/flnl.grad.R index e162762e..5d387cbf 100644 --- a/R/flnl.grad.R +++ b/R/flnl.grad.R @@ -1,3 +1,5 @@ +#' Gradients of negative log likelihood function +#' #' This function derives the gradients of the negative log likelihood function, #' with respect to all parameters. It is based on the theory presented in #' Introduction to Distance Sampling (2001) and Distance Sampling: Methods and diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 00000000..5e0319c6 --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,43 @@ +url: ~ +template: + bootstrap: 5 + bslib: + bg: "#fcfaf2" + fg: "#14059e" + primary: "#0542a3" + base_font: {google: "Roboto"} + includes: + in_header: | + + +reference: + +navbar: + bg: primary + structure: + right: [twitter, github] + components: + twitter: + icon: fa-twitter + href: https://twitter.com/distancesamp + aria-label: Twitter + left: + - text: Function reference + href: reference/index.html + - text: Articles + menu: + - text: Point and full independence + href: articles/mrds-golftees.html + - text: News + href: news/index.html + +footer: + structure: + right: donate + left: clarity + components: + donate: "If you wish to donate to development and maintenance, please email us." + clarity: "We improve our site and software support by using Microsoft Clarity to see
+ how you use our website. By using our site, you agree that we and Microsoft
+ can collect and use this data. Clarity is GDPR compliant." + diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 00000000..eea0e2c6 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,81 @@ + + + + + + + +Page not found (404) • mrds + + + + + + + + + + Skip to contents + + +
+
+
+ +Content not found. Please use links in the navbar. + +
+
+ + + +
+ + + + + + + diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html new file mode 100644 index 00000000..6bd86f14 --- /dev/null +++ b/docs/LICENSE-text.html @@ -0,0 +1,732 @@ + +License • mrds + Skip to contents + + +
+
+
+ +
                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+ +
+ + +
+ + + + + + + diff --git a/docs/articles/Interpreting MRDS output.pdf b/docs/articles/Interpreting MRDS output.pdf new file mode 100644 index 00000000..ef623387 Binary files /dev/null and b/docs/articles/Interpreting MRDS output.pdf differ diff --git a/docs/articles/index.html b/docs/articles/index.html new file mode 100644 index 00000000..4409c795 --- /dev/null +++ b/docs/articles/index.html @@ -0,0 +1,62 @@ + +Articles • mrds + Skip to contents + + +
+
+
+ +
+

All vignettes

+
+ +
Double platform analysis
+

Estimating g(0) comparing full and point independence models

+
+
+ + +
+ + + + + + + diff --git a/docs/articles/mrds-golftees.html b/docs/articles/mrds-golftees.html new file mode 100644 index 00000000..0ae9fed3 --- /dev/null +++ b/docs/articles/mrds-golftees.html @@ -0,0 +1,1022 @@ + + + + + + + +Double platform analysis • mrds + + + + + + + + + + + + Skip to contents + + +
+ + +
+
+ + + +

This example looks at mark-recapture distance sampling (MRDS) models. The first part of this exercise involves analysis of a survey of a known number of golf tees. This is intended mainly to familiarise you with the double-platform data structure and analysis features in the R function mrds (Laake, Borchers, Thomas, Miller, & Bishop, 2019).

+

To help understand the terminology using in MRDS and the output produced by mrds, there is a guide available at this link called Interpreting MRDS output: making sense of all the numbers.

+
+

Aims +

+

The aims of this practical are to learn how to model

+
    +
  • trial and independent-observer configuration
  • +
  • full and point independence assumptions,
  • +
  • include covariates in the detection function(s) and
  • +
  • select between competing models.
  • +
+
+

Golf tee data +

+

These data come from a survey of golf tees which conducted by statistics students at the University of St Andrews. The data were collected along transect lines, 210 metres in total. A distance of 4 metres out from the centre line was searched and, for the purposes of this exercise, we assume that this comprised the total study area, which was divided into two strata. There were 250 clusters of tees in total and 760 individual tees in total.

+

The population was independently surveyed by two observer teams. The following data were recorded for each detected group: perpendicular distance, cluster size, observer (team 1 or 2), ‘sex’ (males are yellow and females are green and golf tees occur in single-sex clusters) and ‘exposure’. Exposure was a subjective judgment of whether the cluster was substantially obscured by grass (exposure=0) or not (exposure=1). The lengths of grass varied along the transect line and the grass was slightly more yellow along one part of the line compared to the rest.

+

The golf tee dataset is provided as part of the mrds package.

+

Open R and load the mrds package and golf tee dataset (called book.tee.data). The elements required for an MRDS analysis are contained within the object dataset. These data are in a hierarchical structure (rather than in a ‘flat file’ format) so that there are separate elements for observations, samples and regions. In the code below, each of these tables is extracted to avoid typing long names.

+
+library(knitr)
+library(mrds)
+# Access the golf tee data
+data(book.tee.data)
+# Investigate the structure of the dataset
+str(book.tee.data)
+
## List of 4
+##  $ book.tee.dataframe:'data.frame':  324 obs. of  7 variables:
+##   ..$ object  : num [1:324] 1 1 2 2 3 3 4 4 5 5 ...
+##   ..$ observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ...
+##   ..$ detected: num [1:324] 1 0 1 0 1 0 1 0 1 0 ...
+##   ..$ distance: num [1:324] 2.68 2.68 3.33 3.33 0.34 0.34 2.53 2.53 1.46 1.46 ...
+##   ..$ size    : num [1:324] 2 2 2 2 1 1 2 2 2 2 ...
+##   ..$ sex     : num [1:324] 1 1 1 1 0 0 1 1 1 1 ...
+##   ..$ exposure: num [1:324] 1 1 0 0 0 0 1 1 0 0 ...
+##  $ book.tee.region   :'data.frame':  2 obs. of  2 variables:
+##   ..$ Region.Label: Factor w/ 2 levels "1","2": 1 2
+##   ..$ Area        : num [1:2] 1040 640
+##  $ book.tee.samples  :'data.frame':  11 obs. of  3 variables:
+##   ..$ Sample.Label: num [1:11] 1 2 3 4 5 6 7 8 9 10 ...
+##   ..$ Region.Label: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 2 2 2 2 ...
+##   ..$ Effort      : num [1:11] 10 30 30 27 21 12 23 23 15 12 ...
+##  $ book.tee.obs      :'data.frame':  162 obs. of  3 variables:
+##   ..$ object      : int [1:162] 1 2 3 21 22 23 24 59 60 61 ...
+##   ..$ Region.Label: int [1:162] 1 1 1 1 1 1 1 1 1 1 ...
+##   ..$ Sample.Label: int [1:162] 1 1 1 1 1 1 1 1 1 1 ...
+
+# Extract the list elements from the dataset into easy-to-access objects
+detections <- book.tee.data$book.tee.dataframe # detection information
+region <- book.tee.data$book.tee.region # region info
+samples <- book.tee.data$book.tee.samples # transect info
+obs <- book.tee.data$book.tee.obs # links detections to transects and regions
+

Examine the columns in the detections data because it has a particular structure.

+
+# Check detections
+head(detections)
+
##    object observer detected distance size sex exposure
+## 1       1        1        1     2.68    2   1        1
+## 21      1        2        0     2.68    2   1        1
+## 2       2        1        1     3.33    2   1        0
+## 22      2        2        0     3.33    2   1        0
+## 3       3        1        1     0.34    1   0        0
+## 23      3        2        0     0.34    1   0        0
+

The structure of the detection is as follows:

+
    +
  • each detected object (in this case the object was a group or cluster of golf tees) is given a unique number in the object column,
  • +
  • each object occurs twice - once for observer 1 and once for observer 2,
  • +
  • the detected column indicates whether the object was seen (detected=1) or not seen (detected=0) by the observer,
  • +
  • perpendicular distance is in the distance column and cluster size is in the size column (the same default names as for the ds function).
  • +
+

To ensure that the variables sex and exposure are treated correctly, define them as factor variables.

+
+# Define sex and exposure as factor variables 
+detections$sex <- as.factor(detections$sex)
+detections$exposure <- as.factor(detections$exposure)
+
+
+

Golf tee survey analyses +

+
+

Estimation of p(0): distance only +

+

We will start by analysing these data assuming that Observer 2 was generating trials for Observer 1 but not vice versa, i.e. trial configuration where Observer 1 is the primary and Observer 2 is the tracker. (The data could also be analysed in independent observer configuration - you are welcome to try this for yourself). We begin by assuming full independence (i.e. detections between observers are independent at all distances): this requires only a mark-recapture (MR) model and, to start with, perpendicular distance will be included as the only covariate.

+
+# Fit trial configuration with full independence model
+fi.mr.dist <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance),
+                  data=detections, meta.data=list(width=4))
+
+
Examining mrds output +
+

Having fitted the model, we can create tables summarizing the detection data. In the commands below, the tables are created using the det.tables function and saved to detection.tables.

+
+# Create a set of tables summarizing the double observer data 
+detection.tables <- det.tables(fi.mr.dist)
+# Print these detection tables
+print(detection.tables)
+
## 
+## Observer 1 detections
+##            Detected
+##             Missed Detected
+##   [0,0.4]        1       25
+##   (0.4,0.8]      2       16
+##   (0.8,1.2]      2       16
+##   (1.2,1.6]      6       22
+##   (1.6,2]        5        9
+##   (2,2.4]        2       10
+##   (2.4,2.8]      6       12
+##   (2.8,3.2]      6        9
+##   (3.2,3.6]      2        3
+##   (3.6,4]        6        2
+## 
+## Observer 2 detections
+##            Detected
+##             Missed Detected
+##   [0,0.4]        4       22
+##   (0.4,0.8]      1       17
+##   (0.8,1.2]      0       18
+##   (1.2,1.6]      2       26
+##   (1.6,2]        1       13
+##   (2,2.4]        2       10
+##   (2.4,2.8]      3       15
+##   (2.8,3.2]      4       11
+##   (3.2,3.6]      2        3
+##   (3.6,4]        1        7
+## 
+## Duplicate detections
+## 
+##   [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6]   (1.6,2]   (2,2.4] (2.4,2.8] (2.8,3.2] 
+##        21        15        16        20         8         8         9         5 
+## (3.2,3.6]   (3.6,4] 
+##         1         1 
+## 
+## Observer 1 detections of those seen by Observer 2
+##           Missed Detected Prop. detected
+## [0,0.4]        1       21      0.9545455
+## (0.4,0.8]      2       15      0.8823529
+## (0.8,1.2]      2       16      0.8888889
+## (1.2,1.6]      6       20      0.7692308
+## (1.6,2]        5        8      0.6153846
+## (2,2.4]        2        8      0.8000000
+## (2.4,2.8]      6        9      0.6000000
+## (2.8,3.2]      6        5      0.4545455
+## (3.2,3.6]      2        1      0.3333333
+## (3.6,4]        6        1      0.1428571
+

The information in detection summary tables can be plotted, but, in the interest of space, only one (out of six possible plots) is shown (Figure 1).

+
+# Plot detection information, change number to see other plots
+plot(detection.tables, which=1)
+
+ +Detection distances for observer 1

+Figure 1: Detection distances for observer 1 +

+
+

The plot numbers are:

+
    +
  1. Histograms of distances for detections by either, or both, observers. The shaded regions show the number for observer 1.
  2. +
  3. Histograms of distances for detections by either, or both, observers. The shaded regions show the number for observer 2.
  4. +
  5. Histograms of distances for duplicates (detected by both observers).
  6. +
  7. Histogram of distances for detections by either, or both, observers. Not shown for trial configuration.
  8. +
  9. Histograms of distances for observer 2. The shaded regions indicate the number of duplicates - for example, the shaded region is the number of clusters in each distance bin that were detected by Observer 1 given that they were also detected by Observer 2 (the “|” symbol in the plot legend means “given that”).
  10. +
  11. Histograms of distances for observer 1. The shaded regions indicate the number of duplicates as for plot 5. Not shown for trial configuration.
  12. +
+

Note that if an independent observer configuration had been chosen, all plots would be available.

+

A summary of the detection function model is available using the summary function. The Q-Q plot has the same interpretation as a Q-Q plot in a conventional, single platform analysis (Figure 2).

+
+# Produce a summary of the fitted detection function object
+summary(fi.mr.dist)
+
## 
+## Summary for trial.fi object 
+## Number of observations               :  162 
+## Number seen by primary               :  124 
+## Number seen by secondary (trials)    :  142 
+## Number seen by both (detected trials):  104 
+## AIC                                  :  452.8094 
+## 
+## 
+## Conditional detection function parameters:
+##              estimate        se
+## (Intercept)  2.900233 0.4876238
+## distance    -1.058677 0.2235722
+## 
+##                         Estimate          SE         CV
+## Average p              0.6423252  0.04069410 0.06335435
+## Average primary p(0)   0.9478579  0.06109656 0.06445750
+## N in covered region  193.0486185 15.84826582 0.08209469
+
+# Produce goodness of fit statistics and a qq plot
+gof.result <- ddf.gof(fi.mr.dist, 
+                      main="Full independence, trial configuration\ngoodness of fit Golf tee data")
+
+ +Fitted detection function for full independence, trial mode.

+Figure 2: Fitted detection function for full independence, trial mode. +

+
+
+# Extract chi-square statistics for reporting
+chi.distance <- gof.result$chisquare$chi1$chisq
+chi.markrecap <- gof.result$chisquare$chi2$chisq
+chi.total <- gof.result$chisquare$pooled.chi
+

Abbreviated \(\chi^2\) goodness-of-fit assessment shows the \(\chi^2\) contribution from the distance sampling model to be 11.5 and the \(\chi^2\) contribution from the mark-recapture model to be 3.4. The combination of these elements produces a total \(\chi^2\) of 14.9 with 17 degrees of freedom, resulting in a \(p\)-value of 0.604

+

The (two) detection functions can be plotted (Figure 3).

+
+par(mfrow=c(1,2))
+# Plot detection functions
+plot(fi.mr.dist)
+
+ +Observer 1 detection function (left) and conditional detection probabilty plot (right).

+Figure 3: Observer 1 detection function (left) and conditional detection probabilty plot (right). +

+
+
+par(mfrow=c(1,1))
+

The plot labelled

+
    +
  • “Observer=1 detections” shows a histogram of Observer 1 detections with the estimated Observer 1 detection function overlaid on it and adjusted for p(0). The dots show the estimated detection probability for all Observer 1 detections.
  • +
  • “Conditional detection probability” shows the proportion of Obs 2’s detections that were detected by Obs 1 (also see the detection tables). The fitted line is the estimated detection probability function for Obs 1 (given detection by Obs 2) - this is the MR model. Dots are estimated detection probabilities for each Obs 1 detection.
  • +
+

There is some evidence of unmodelled heterogeneity in that the fitted line in the left-hand plot declines more slowly than the histogram as the distance increases.

+
+
+
Estimating abundance +
+

Abundance is estimated using the dht function. In this function, we need to supply information about the transects and survey regions.

+
+# Calculate density estimates using the dht function
+tee.abund <- dht(model=fi.mr.dist, region.table=region, sample.table=samples, obs.table=obs)
+# Print out results in a nice format
+knitr::kable(tee.abund$individuals$summary, digits=2, 
+      caption="Survey summary statistics for golftees")
+ + +++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 1: Survey summary statistics for golftees
RegionAreaCoveredAreaEffortnkERse.ERcv.ERmean.sizese.mean
11040104013022961.760.120.073.180.21
26406408015251.900.330.182.920.23
Total16801680210381111.810.150.083.070.15
+
+knitr::kable(tee.abund$individuals$N, digits=2, 
+      caption="Abundance estimates for golftee population with two strata")
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 1: Abundance estimates for golftee population with two strata
LabelEstimatesecvlclucldf
1356.5232.350.09294.54431.5317.13
2236.6444.140.19147.33380.095.06
Total593.1660.380.10478.32735.5716.06
+

The estimated abundance is 593 (recall that the true abundance is 760) and so this estimate is negatively biased. The 95% confidence interval does not include the true value.

+
+
+
+

Estimation of p(0): distance and other explanatory variables +

+

How about including the other covariates, size, sex and exposure, in the MR model? Which MR model would you use? In the command below, distance and sex are included in the detection function - remember sex was defined as a factor earlier on.

+

In the code below, all possible models (excluding interaction terms) are fitted.

+
+# Full independence model
+# Set up list with possible models
+mr.formula <- c("~distance","~distance+size","~distance+sex","~distance+exposure",
+                "~distance+size+sex","~distance+size+exposure","~distance+sex+exposure",
+                "~distance+size+sex+exposure")
+num.mr.models <- length(mr.formula)
+# Create dataframe to store results
+fi.results <- data.frame(MRmodel=mr.formula, AIC=rep(NA,num.mr.models))
+# Loop through all MR models
+for (i in 1:num.mr.models) {
+  fi.model  <- ddf(method='trial.fi', 
+                   mrmodel=~glm(link='logit',formula=as.formula(mr.formula[i])),
+                  data=detections, meta.data=list(width=4))
+  fi.results$AIC[i] <- summary(fi.model)$aic
+}
+# Calculate delta AIC
+fi.results$deltaAIC <- fi.results$AIC - min(fi.results$AIC)
+# Order by delta AIC
+fi.results <- fi.results[order(fi.results$deltaAIC), ]
+# Print results in pretty way
+knitr::kable(fi.results, digits=2)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MRmodelAICdeltaAIC
7~distance+sex+exposure405.680.00
8~distance+size+sex+exposure407.401.72
4~distance+exposure433.7228.04
3~distance+sex434.4128.74
6~distance+size+exposure435.3329.65
5~distance+size+sex436.0230.34
1~distance452.8147.13
2~distance+size454.5848.91
+
+# Fit chosen model
+fi.mr.dist.sex.exp  <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance+sex+exposure),
+                           data=detections, meta.data=list(width=4))
+

We see that the preferred model contains distance + sex + exposure so check the goodness-of-fit statistics (Figure 4) and detection function plots (Figure 5).

+
+# Check goodness-of-fit 
+ddf.gof(fi.mr.dist.sex.exp, main="FI trial mode\nMR=dist+sex+exp")
+
+ +Preferred model goodness of fit.

+Figure 4: Preferred model goodness of fit. +

+
+
## 
+## Goodness of fit results for ddf object
+## 
+## Chi-square tests
+## 
+## Distance sampling component:
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed   25.000    16.000    16.000    22.000   9.000  10.000    12.000
+## Expected   20.276    19.341    18.074    16.345  14.083  11.511     9.046
+## Chisquare   1.101     0.577     0.238     1.957   1.834   0.198     0.964
+##           (2.8,3.2] (3.2,3.6] (3.6,4]   Total
+## Observed      9.000     3.000   2.000 124.000
+## Expected      6.915     5.044   3.366 124.000
+## Chisquare     0.629     0.828   0.554   8.881
+## 
+## No degrees of freedom for test
+## 
+## Mark-recapture component:
+## Capture History 01
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed        1         2         2         6       5       2         6
+## Expected        1         2         2         6       4       4         6
+## Chisquare       0         0         0         0       0       1         0
+##           (2.8,3.2] (3.2,3.6] (3.6,4] Total
+## Observed          6         2       6    38
+## Expected          7         2       5    38
+## Chisquare         0         0       0     2
+## Capture History 11
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed       21        15        16        20       8       8         9
+## Expected       21        15        16        20       9       6         9
+## Chisquare       0         0         0         0       0       1         0
+##           (2.8,3.2] (3.2,3.6] (3.6,4] Total
+## Observed          5         1       1   104
+## Expected          4         1       2   104
+## Chisquare         0         0       1     2
+## 
+## 
+## Total chi-square = 12.205  P = 0.66344 with 15 degrees of freedom
+## 
+## Distance sampling Cramer-von Mises test (unweighted)
+## Test statistic = 0.0976947 p-value = 0.596294
+
+par(mfrow=c(1,2))
+plot(fi.mr.dist.sex.exp)
+
+ +Detection functions for full independence model with distance, sex and exposure in MR component.

+Figure 5: Detection functions for full independence model with distance, sex and exposure in MR component. +

+
+

And produce abundance estimates.

+
+# Get abundance estimates 
+tee.abund.fi <- dht(model=fi.mr.dist.sex.exp, region.table=region,
+                    sample.table=samples, obs.table=obs)
+# Print results
+print(tee.abund.fi)
+
## Abundance and density estimates from distance sampling
+## Variance       : R2, N/L 
+## 
+## Summary statistics
+## 
+##   Region Area CoveredArea Effort   n  k        ER      se.ER      cv.ER
+## 1      1 1040        1040    130  72  6 0.5538462 0.02926903 0.05284685
+## 2      2  640         640     80  52  5 0.6500000 0.08292740 0.12758061
+## 3  Total 1680        1680    210 124 11 0.5904762 0.03641856 0.06167659
+## 
+## Summary for clusters
+## 
+## Abundance:
+##   Region  Estimate       se        cv       lcl      ucl       df
+## 1      1 119.28976 14.18666 0.1189260  91.64685 155.2704 10.12494
+## 2      2  98.17731 18.59356 0.1893876  63.58200 151.5961  7.83844
+## 3  Total 217.46707 26.05226 0.1197987 169.90391 278.3451 23.21368
+## 
+## Density:
+##   Region  Estimate         se        cv        lcl       ucl       df
+## 1      1 0.1147017 0.01364102 0.1189260 0.08812198 0.1492985 10.12494
+## 2      2 0.1534020 0.02905244 0.1893876 0.09934687 0.2368689  7.83844
+## 3  Total 0.1294447 0.01550730 0.1197987 0.10113328 0.1656816 23.21368
+## 
+## Summary for individuals
+## 
+## Abundance:
+##   Region Estimate       se        cv      lcl      ucl        df
+## 1      1 371.0397 37.86856 0.1020607 297.1733 463.2666 11.904084
+## 2      2 279.7141 67.25221 0.2404320 154.4960 506.4208  5.482654
+## 3  Total 650.7538 82.72649 0.1271241 493.7469 857.6875 11.907393
+## 
+## Density:
+##   Region  Estimate         se        cv       lcl       ucl        df
+## 1      1 0.3567690 0.03641208 0.1020607 0.2857436 0.4454487 11.904084
+## 2      2 0.4370533 0.10508158 0.2404320 0.2414000 0.7912825  5.482654
+## 3  Total 0.3873535 0.04924196 0.1271241 0.2938970 0.5105283 11.907393
+## 
+## Expected cluster size
+##   Region Expected.S se.Expected.S cv.Expected.S
+## 1      1   3.110407     0.2740170    0.08809682
+## 2      2   2.849071     0.2211204    0.07761141
+## 3  Total   2.992425     0.1758058    0.05875027
+

This model incorporates the effect of more variables causing the heterogeneity. The estimated abundance is 651 which is less biased than the previous estimate and the 95% confidence interval (494, 858) contains the true value.

+

The model is a reasonable fit to the data (i.e. non-significant \(\chi^2\) and Cramer von Mises tests). This model has a lower AIC (405.7) than the model with only distance (452.81) and so is to be preferred.

+
+
+

Point independence +

+

A less restrictive assumption than full independence is point independence, which assumes that detections are only independent on the transect centre line i.e. at perpendicular distance zero (Buckland, Laake, & Borchers, 2010).

+

Determine if a simple point independence model is better than a simple full independence one. This requires that a distance sampling (DS) model is specified as well a MR model. Here we try a half-normal key function for the DS model (Figure 6).

+
+# Fit trial configuration with point independence model
+pi.mr.dist <- ddf(method='trial', 
+                  mrmodel=~glm(link='logit', formula=~distance),
+                  dsmodel=~cds(key='hn'), 
+                  data=detections, meta.data=list(width=4))
+# Summary pf the model 
+summary(pi.mr.dist)
+
## 
+## Summary for trial.fi object 
+## Number of observations               :  162 
+## Number seen by primary               :  124 
+## Number seen by secondary (trials)    :  142 
+## Number seen by both (detected trials):  104 
+## AIC                                  :  140.8887 
+## 
+## 
+## Conditional detection function parameters:
+##              estimate        se
+## (Intercept)  2.900233 0.4876238
+## distance    -1.058677 0.2235722
+## 
+##                       Estimate         SE         CV
+## Average primary p(0) 0.9478579 0.02409996 0.02542571
+## 
+## 
+## 
+## Summary for ds object
+## Number of observations :  124 
+## Distance range         :  0  -  4 
+## AIC                    :  311.1385 
+## Optimisation           :  mrds (nlminb) 
+## 
+## Detection function:
+##  Half-normal key function 
+## 
+## Detection function parameters 
+## Scale coefficient(s): 
+##              estimate         se
+## (Intercept) 0.6632435 0.09981249
+## 
+##            Estimate         SE         CV
+## Average p 0.5842744 0.04637627 0.07937412
+## 
+## 
+## Summary for trial object
+## 
+## Total AIC value =  452.0272 
+##                        Estimate          SE         CV
+## Average p             0.5538091  0.04615832 0.08334697
+## N in covered region 223.9038534 22.99246338 0.10268900
+
+# Produce goodness of fit statistics and a qq plot
+gof.results <- ddf.gof(pi.mr.dist, 
+                       main="Point independence, trial configuration\n goodness of fit Golftee data")
+
+ +Point independence model in trial configuration goodness of fit.

+Figure 6: Point independence model in trial configuration goodness of fit. +

+
+

The AIC for this point independence model is 452.03 which is marginally smaller than the first full independence model that was fitted and hence is to be preferred.

+
+# Get abundance estimates 
+tee.abund.pi <- dht(model=pi.mr.dist, region.table=region,
+                    sample.table=samples, obs.table=obs)
+# Print results
+print(tee.abund.pi)
+
## Abundance and density estimates from distance sampling
+## Variance       : R2, N/L 
+## 
+## Summary statistics
+## 
+##   Region Area CoveredArea Effort   n  k        ER      se.ER      cv.ER
+## 1      1 1040        1040    130  72  6 0.5538462 0.02926903 0.05284685
+## 2      2  640         640     80  52  5 0.6500000 0.08292740 0.12758061
+## 3  Total 1680        1680    210 124 11 0.5904762 0.03641856 0.06167659
+## 
+## Summary for clusters
+## 
+## Abundance:
+##   Region  Estimate       se         cv       lcl      ucl        df
+## 1      1 130.00869 12.83042 0.09868894 106.66570 158.4601 48.427773
+## 2      2  93.89516 14.30894 0.15239268  66.25307 133.0701  8.094137
+## 3  Total 223.90385 23.21562 0.10368567 181.78333 275.7840 44.038262
+## 
+## Density:
+##   Region  Estimate         se         cv       lcl       ucl        df
+## 1      1 0.1250084 0.01233694 0.09868894 0.1025632 0.1523655 48.427773
+## 2      2 0.1467112 0.02235771 0.15239268 0.1035204 0.2079220  8.094137
+## 3  Total 0.1332761 0.01381882 0.10368567 0.1082044 0.1641571 44.038262
+## 
+## Summary for individuals
+## 
+## Abundance:
+##   Region Estimate       se        cv      lcl      ucl        df
+## 1      1 413.4999 44.00744 0.1064267 332.9536 513.5313 30.289360
+## 2      2 274.4628 53.42626 0.1946576 171.1754 440.0740  5.987499
+## 3  Total 687.9626 79.79844 0.1159924 542.4532 872.5040 25.993175
+## 
+## Density:
+##   Region  Estimate         se        cv       lcl       ucl        df
+## 1      1 0.3975960 0.04231485 0.1064267 0.3201477 0.4937801 30.289360
+## 2      2 0.4288481 0.08347854 0.1946576 0.2674615 0.6876156  5.987499
+## 3  Total 0.4095016 0.04749907 0.1159924 0.3228888 0.5193476 25.993175
+## 
+## Expected cluster size
+##   Region Expected.S se.Expected.S cv.Expected.S
+## 1      1   3.180556     0.2114629    0.06648615
+## 2      2   2.923077     0.1750319    0.05987935
+## 3  Total   3.072581     0.1391365    0.04528327
+

This results in an estimated abundance of 688. Can we do better if more covariates are included in the DS model?

+
+
Covariates in the DS model +
+

To include covariates in the DS detection function, we need to specify an MCDS model as follows:

+
+# Fit the PI-trial model - DS sex and MR distance 
+pi.mr.dist.ds.sex <- ddf(method='trial', 
+                         mrmodel=~glm(link='logit',formula=~distance),
+                         dsmodel=~mcds(key='hn',formula=~sex), 
+                         data=detections, meta.data=list(width=4))
+

Use the summary function to check the AIC and decide if you are going to include any additional covariates in the detection function.

+

Now try a point independence model that has the preferred MR model from your full independence analyses.

+
+# Point independence model, Include covariates in DS model
+# Use selected MR model, iterate across DS models
+ds.formula <- c("~size","~sex","~exposure","~size+sex","~size+exposure","~sex+exposure",
+                "~size+sex+exposure")
+num.ds.models <- length(ds.formula)
+# Create dataframe to store results
+pi.results <- data.frame(DSmodel=ds.formula, AIC=rep(NA,num.ds.models))
+# Loop through ds models - use selected MR model from earlier
+for (i in 1:num.ds.models) {
+  pi.model <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure),
+                  dsmodel=~mcds(key='hn',formula=as.formula(ds.formula[i])), 
+                  data=detections, meta.data=list(width=4))
+  pi.results$AIC[i] <- summary(pi.model)$AIC
+}
+# Calculate delta AIC
+pi.results$deltaAIC <- pi.results$AIC - min(pi.results$AIC)
+# Order by delta AIC
+pi.results <- pi.results[order(pi.results$deltaAIC), ]
+knitr::kable(pi.results, digits = 2)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DSmodelAICdeltaAIC
2~sex399.260.00
6~sex+exposure400.281.02
4~size+sex401.061.80
7~size+sex+exposure401.942.69
1~size407.928.66
3~exposure407.978.72
5~size+exposure409.8910.63
+

This indicates that sex should be included in the DS model. We do this and check the goodness of fit and obtain abundance (Figure 7).

+
+# Fit chosen model
+pi.ds.sex <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure),
+                dsmodel=~mcds(key='hn',formula=~sex), data=detections,  
+                meta.data=list(width=4))
+summary(pi.ds.sex)
+
## 
+## Summary for trial.fi object 
+## Number of observations               :  162 
+## Number seen by primary               :  124 
+## Number seen by secondary (trials)    :  142 
+## Number seen by both (detected trials):  104 
+## AIC                                  :  94.89911 
+## 
+## 
+## Conditional detection function parameters:
+##               estimate        se
+## (Intercept)  0.7870962 0.6774633
+## distance    -1.9435496 0.3706866
+## sex1         2.8059863 0.6828331
+## exposure1    3.6094527 0.7332797
+## 
+##                       Estimate         SE         CV
+## Average primary p(0) 0.9697357 0.02018875 0.02081882
+## 
+## 
+## 
+## Summary for ds object
+## Number of observations :  124 
+## Distance range         :  0  -  4 
+## AIC                    :  304.3594 
+## Optimisation           :  mrds (nlminb) 
+## 
+## Detection function:
+##  Half-normal key function 
+## 
+## Detection function parameters 
+## Scale coefficient(s): 
+##              estimate        se
+## (Intercept) 0.2525377 0.1327279
+## sex1        0.5832341 0.2041094
+## 
+##            Estimate         SE        CV
+## Average p 0.5605421 0.04616356 0.0823552
+## 
+## 
+## Summary for trial object
+## 
+## Total AIC value =  399.2585 
+##                        Estimate          SE         CV
+## Average p             0.5435777  0.04643912 0.08543235
+## N in covered region 228.1182656 24.21303261 0.10614245
+
+# Check goodness-of-fit 
+ddf.gof(pi.ds.sex, main="PI trial configutation\nGolfTee DS model sex")
+
+ +Goodness of fit of point independence model with sex covariate in the distance sampling component and distance, sex and exposure in the mr component.

+Figure 7: Goodness of fit of point independence model with sex covariate in the distance sampling component and distance, sex and exposure in the mr component. +

+
+
## 
+## Goodness of fit results for ddf object
+## 
+## Chi-square tests
+## 
+## Distance sampling component:
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed   25.000    16.000    16.000    22.000   9.000  10.000    12.000
+## Expected   21.917    20.740    18.630    15.976  13.181  10.553     8.261
+## Chisquare   0.434     1.083     0.371     2.272   1.326   0.029     1.692
+##           (2.8,3.2] (3.2,3.6] (3.6,4]   Total
+## Observed      9.000     3.000   2.000 124.000
+## Expected      6.354     4.810   3.579 124.000
+## Chisquare     1.102     0.681   0.697   9.687
+## 
+## P = 0.20699 with 7 degrees of freedom
+## 
+## Mark-recapture component:
+## Capture History 01
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed        1         2         2         6       5       2         6
+## Expected        1         2         2         6       4       4         6
+## Chisquare       0         0         0         0       0       1         0
+##           (2.8,3.2] (3.2,3.6] (3.6,4] Total
+## Observed          6         2       6    38
+## Expected          7         2       5    38
+## Chisquare         0         0       0     2
+## Capture History 11
+##           [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8]
+## Observed       21        15        16        20       8       8         9
+## Expected       21        15        16        20       9       6         9
+## Chisquare       0         0         0         0       0       1         0
+##           (2.8,3.2] (3.2,3.6] (3.6,4] Total
+## Observed          5         1       1   104
+## Expected          4         1       2   104
+## Chisquare         0         0       1     2
+## 
+## MR total chi-square = 3.3242  P = 0.76719 with 6 degrees of freedom
+## 
+## 
+## Total chi-square = 13.012  P = 0.44692 with 13 degrees of freedom
+## 
+## Distance sampling Cramer-von Mises test (unweighted)
+## Test statistic = 0.081285 p-value = 0.684457
+
+# Get abundance estimates 
+tee.abund.pi.ds.sex <- dht(model=pi.ds.sex, region.table=region,
+                    sample.table=samples, obs.table=obs)
+print(tee.abund.pi.ds.sex)
+
## Abundance and density estimates from distance sampling
+## Variance       : R2, N/L 
+## 
+## Summary statistics
+## 
+##   Region Area CoveredArea Effort   n  k        ER      se.ER      cv.ER
+## 1      1 1040        1040    130  72  6 0.5538462 0.02926903 0.05284685
+## 2      2  640         640     80  52  5 0.6500000 0.08292740 0.12758061
+## 3  Total 1680        1680    210 124 11 0.5904762 0.03641856 0.06167659
+## 
+## Summary for clusters
+## 
+## Abundance:
+##   Region Estimate       se        cv       lcl      ucl        df
+## 1      1 125.7678 12.50301 0.0994134 102.97968 153.5987 43.661605
+## 2      2 102.3504 17.53164 0.1712904  68.75816 152.3544  7.394232
+## 3  Total 228.1183 25.15313 0.1102635 182.12587 285.7252 28.045408
+## 
+## Density:
+##   Region  Estimate         se        cv        lcl       ucl        df
+## 1      1 0.1209306 0.01202212 0.0994134 0.09901892 0.1476911 43.661605
+## 2      2 0.1599226 0.02739319 0.1712904 0.10743463 0.2380538  7.394232
+## 3  Total 0.1357847 0.01497210 0.1102635 0.10840826 0.1700745 28.045408
+## 
+## Summary for individuals
+## 
+## Abundance:
+##   Region Estimate       se         cv      lcl      ucl        df
+## 1      1 395.0545 36.33887 0.09198445 329.0893 474.2422 79.293122
+## 2      2 299.7763 65.43246 0.21827099 175.5600 511.8809  5.685162
+## 3  Total 694.8307 84.25522 0.12126006 537.2149 898.6902 15.167148
+## 
+## Density:
+##   Region  Estimate         se         cv       lcl       ucl        df
+## 1      1 0.3798601 0.03494122 0.09198445 0.3164320 0.4560021 79.293122
+## 2      2 0.4684004 0.10223822 0.21827099 0.2743125 0.7998140  5.685162
+## 3  Total 0.4135897 0.05015192 0.12126006 0.3197708 0.5349347 15.167148
+## 
+## Expected cluster size
+##   Region Expected.S se.Expected.S cv.Expected.S
+## 1      1   3.141141     0.2081675    0.06627129
+## 2      2   2.928920     0.1866200    0.06371632
+## 3  Total   3.045923     0.1371508    0.04502767
+

This model estimated an abundance of 695, which is closest to the true value of all the models - it is still less than the true value indicating, perhaps, some unmodelled heterogeneity on the trackline (or perhaps just bad luck - remember this was only one survey).

+

Was this complex modelling worthwhile? In this case, the estimated \(p(0)\) for the best model was 0.97 (which is very close to 1). If we ran a conventional distance sampling analysis, pooling the data from the two observers, we should get a very robust estimate of true abundance.

+
+
+
+
+

References +

+
+
+Buckland, S. T., Laake, J. L., & Borchers, D. L. (2010). Double-observer line transect methods: Levels of independence. Biometrics, 66, 169–177. https://doi.org/10.1111/j.1541-0420.2009.01239.x +
+
+Laake, J., Borchers, D., Thomas, L., Miller, D., & Bishop, J. (2019). Mrds: Mark-recapture distance sampling. +
+
+
+
+
+
+ + + + +
+ + + + + + + diff --git a/docs/articles/mrds-golftees_files/figure-html/bestfi-1.png b/docs/articles/mrds-golftees_files/figure-html/bestfi-1.png new file mode 100644 index 00000000..696b148f Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/bestfi-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/dettabplot-1.png b/docs/articles/mrds-golftees_files/figure-html/dettabplot-1.png new file mode 100644 index 00000000..3dd28964 Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/dettabplot-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/fidetfn-1.png b/docs/articles/mrds-golftees_files/figure-html/fidetfn-1.png new file mode 100644 index 00000000..f3ca9cb7 Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/fidetfn-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/fisummary-1.png b/docs/articles/mrds-golftees_files/figure-html/fisummary-1.png new file mode 100644 index 00000000..5e9c658a Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/fisummary-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/pidssex-1.png b/docs/articles/mrds-golftees_files/figure-html/pidssex-1.png new file mode 100644 index 00000000..a4409f0d Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/pidssex-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/pit-nocovar-1.png b/docs/articles/mrds-golftees_files/figure-html/pit-nocovar-1.png new file mode 100644 index 00000000..7cf6195e Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/pit-nocovar-1.png differ diff --git a/docs/articles/mrds-golftees_files/figure-html/plotdf-1.png b/docs/articles/mrds-golftees_files/figure-html/plotdf-1.png new file mode 100644 index 00000000..02837061 Binary files /dev/null and b/docs/articles/mrds-golftees_files/figure-html/plotdf-1.png differ diff --git a/docs/authors.html b/docs/authors.html new file mode 100644 index 00000000..a10d0c96 --- /dev/null +++ b/docs/authors.html @@ -0,0 +1,114 @@ + +Authors and Citation • mrds + Skip to contents + + +
+
+
+ +
+

Authors

+ +
  • +

    Laura Marshall. Maintainer. +

    +
  • +
  • +

    Jeff Laake. Author. +

    +
  • +
  • +

    David Miller. Author. +

    +
  • +
  • +

    Felix Petersma. Author. +

    +
  • +
  • +

    Len Thomas. Contributor. +

    +
  • +
  • +

    David Borchers. Contributor. +

    +
  • +
  • +

    Jon Bishop. Contributor. +

    +
  • +
  • +

    Jonah McArthur. Contributor. +

    +
  • +
  • +

    Eric Rexstad. Reviewer. +

    +
  • +
+ +
+

Citation

+

Source: DESCRIPTION

+ +

Laake J, Miller D, Petersma F (2024). +mrds: Mark-Recapture Distance Sampling. +R package version 3.0.0, https://github.com/DistanceDevelopment/mrds/. +

+
@Manual{,
+  title = {mrds: Mark-Recapture Distance Sampling},
+  author = {Jeff Laake and David Miller and Felix Petersma},
+  year = {2024},
+  note = {R package version 3.0.0},
+  url = {https://github.com/DistanceDevelopment/mrds/},
+}
+
+ +
+ + +
+ + + + + + + diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 new file mode 100644 index 00000000..a7f32b6f Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4WxKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4mxK.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4mxK.woff2 new file mode 100644 index 00000000..2d7b2151 Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu4mxK.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 new file mode 100644 index 00000000..a4962e9b Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu5mxKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu72xKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu72xKOzY.woff2 new file mode 100644 index 00000000..e3d708f3 Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu72xKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 new file mode 100644 index 00000000..20c87e67 Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 new file mode 100644 index 00000000..cfd043db Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7WxKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 new file mode 100644 index 00000000..47ce460f Binary files /dev/null and b/docs/deps/Roboto-0.4.9/KFOmCnqEu92Fr1Mu7mxKOzY.woff2 differ diff --git a/docs/deps/Roboto-0.4.9/font.css b/docs/deps/Roboto-0.4.9/font.css new file mode 100644 index 00000000..fd77771f --- /dev/null +++ b/docs/deps/Roboto-0.4.9/font.css @@ -0,0 +1,63 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js b/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js new file mode 100644 index 00000000..e8f21f70 --- /dev/null +++ b/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map b/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map new file mode 100644 index 00000000..3863da8b --- /dev/null +++ b/docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","DATA_API_KEY","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","endCallBack","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","complete","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","Offcanvas","blur","completeCallback","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_ACTIVATE","EVENT_CLICK","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","HOME_KEY","END_KEY","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' +\n '
' +\n '
' +\n '
',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    and
')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('
');n.attr("href","#"+e),n.text(t);var r=a("
  • ");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1 + + + + + + + + + + + + + diff --git a/docs/deps/font-awesome-6.4.2/css/all.css b/docs/deps/font-awesome-6.4.2/css/all.css new file mode 100644 index 00000000..bdb6e3ae --- /dev/null +++ b/docs/deps/font-awesome-6.4.2/css/all.css @@ -0,0 +1,7968 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-arrow-turn-right::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/docs/deps/font-awesome-6.4.2/css/all.min.css b/docs/deps/font-awesome-6.4.2/css/all.min.css new file mode 100644 index 00000000..6604a067 --- /dev/null +++ b/docs/deps/font-awesome-6.4.2/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/docs/deps/font-awesome-6.4.2/css/v4-shims.css b/docs/deps/font-awesome-6.4.2/css/v4-shims.css new file mode 100644 index 00000000..a85953d1 --- /dev/null +++ b/docs/deps/font-awesome-6.4.2/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/docs/deps/font-awesome-6.4.2/css/v4-shims.min.css b/docs/deps/font-awesome-6.4.2/css/v4-shims.min.css new file mode 100644 index 00000000..64e4e8d8 --- /dev/null +++ b/docs/deps/font-awesome-6.4.2/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf b/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000..30f55b74 Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 b/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000..8a480d9b Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf b/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000..c79589d8 Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 b/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000..059a94e2 Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf b/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000..e479fb29 Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 b/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000..88b0367a Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf b/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000..ba6cb258 Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf differ diff --git a/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 b/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000..23b1c47b Binary files /dev/null and b/docs/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 differ diff --git a/docs/deps/font-awesome-6.5.2/css/all.css b/docs/deps/font-awesome-6.5.2/css/all.css new file mode 100644 index 00000000..151dd57c --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/all.css @@ -0,0 +1,8028 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, 0)); + transform: rotate(var(--fa-rotate-angle, 0)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-table-cells-column-lock::before { + content: "\e678"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-table-cells-row-lock::before { + content: "\e67a"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-jxl:before { + content: "\e67b"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-square-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-web-awesome:before { + content: "\e682"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-square-web-awesome-stroke:before { + content: "\e684"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-square-upwork:before { + content: "\e67c"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-square-web-awesome:before { + content: "\e683"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-bluesky:before { + content: "\e671"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/docs/deps/font-awesome-6.5.2/css/all.min.css b/docs/deps/font-awesome-6.5.2/css/all.min.css new file mode 100644 index 00000000..269bceea --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/docs/deps/font-awesome-6.5.2/css/v4-shims.css b/docs/deps/font-awesome-6.5.2/css/v4-shims.css new file mode 100644 index 00000000..ea60ea4d --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css b/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css new file mode 100644 index 00000000..09baf5fc --- /dev/null +++ b/docs/deps/font-awesome-6.5.2/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000..1fbb1f7c Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000..5d280216 Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000..549d68dc Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000..18400d7f Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000..bb2a8695 Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000..758dd4f6 Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf b/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000..8c5864c4 Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf differ diff --git a/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 b/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000..f94bec22 Binary files /dev/null and b/docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 differ diff --git a/docs/deps/headroom-0.11.0/headroom.min.js b/docs/deps/headroom-0.11.0/headroom.min.js new file mode 100644 index 00000000..433069fd --- /dev/null +++ b/docs/deps/headroom-0.11.0/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.11.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t,n){n=n||{},Object.assign(this,o.options,n),this.classes=Object.assign({},o.options.classes,n.classes),this.elem=t,this.tolerance=function(t){return t===Object(t)?t:{down:t,up:t}}(this.tolerance),this.initialised=!1,this.frozen=!1}return o.prototype={constructor:o,init:function(){return o.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},o.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},o.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),o}); \ No newline at end of file diff --git a/docs/deps/headroom-0.11.0/jQuery.headroom.min.js b/docs/deps/headroom-0.11.0/jQuery.headroom.min.js new file mode 100644 index 00000000..17f70c9e --- /dev/null +++ b/docs/deps/headroom-0.11.0/jQuery.headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(a){a&&(a.fn.headroom=function(b){return this.each(function(){var c=a(this),d=c.data("headroom"),e="object"==typeof b&&b;e=a.extend(!0,{},Headroom.options,e),d||(d=new Headroom(this,e),d.init(),c.data("headroom",d)),"string"==typeof b&&(d[b](),"destroy"===b&&c.removeData("headroom"))})},a("[data-headroom]").each(function(){var b=a(this);b.headroom(b.data())}))}(window.Zepto||window.jQuery); \ No newline at end of file diff --git a/docs/deps/jquery-3.6.0/jquery-3.6.0.js b/docs/deps/jquery-3.6.0/jquery-3.6.0.js new file mode 100644 index 00000000..fc6c299b --- /dev/null +++ b/docs/deps/jquery-3.6.0/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + Skip to contents + + +
    +
    +
    + +

    Build Status CRAN (RStudio Mirror) Downloads CRAN Version Codecov test coverage

    +
    +
    +

    What is mrds? +

    +

    This package for R analyzes single or double observer distance sampling data for line or point sampling. It is used in program DISTANCE as one of the analysis engines. Supported double observer configurations include independent, trial and removal. Not all options in mrds are fully supported via DISTANCE.

    +

    If you only wish to perform a conventional or multiple covariate distance sampling analysis (CDS/MCDS) (as opposed to a double observer analysis), you may want to try the Distance R package, which has a simplified interface and is available from https://github.com/DistanceDevelopment/Distance.

    +
    +
    +

    Getting mrds + +

    +

    The easiest way to ensure you have the latest version of mrds, is to install using the remotes package:

    +
      install.packages("remotes")
    +

    then install mrds from github:

    +
      library(remotes)
    +  install_github("DistanceDevelopment/mrds")
    +

    Otherwise:

    +
      +
    • One can download a Windows package binary using the “Releases” tab in github. To install in R, from the R menu, use “Packagesfrom Local Zip file” and browse to location of downloaded zip.
    • +
    • Or, download package source files.
    • +
    • Finally the current stable version of mrds is available on CRAN, though this may be up to a month out of date due to CRAN policy.
    • +
    +
    +
    +

    References +

    +

    The following are references for the methods used in the package.

    +

    Burt, M. L., D. L. Borchers, K. J. Jenkins and T. A. Marques. (2014). “Using mark-recapture distance sampling methods on line transect surveys.” Methods in Ecology and Evolution 5: 1180-1191.

    +

    Buckland, S. T., J. Laake, et al. (2010). “Double observer line transect methods: levels of independence.” Biometrics 66: 169-177.

    +

    Borchers, D. L., J. L. Laake, et al. (2006). “Accommodating unmodeled heterogeneity in double-observer distance sampling surveys.” Biometrics 62(2): 372-378.

    +

    Buckland, S. T., D. R. Anderson, et al., Eds. (2004). Advanced distance sampling: estimating abundance of biological populations. Oxford, UK; New York, Oxford University Press. (see chapter 6).

    +
    + +
    +
    + + +
    + + + +
    +
    + + + + + + + diff --git a/docs/katex-auto.js b/docs/katex-auto.js new file mode 100644 index 00000000..20651d9f --- /dev/null +++ b/docs/katex-auto.js @@ -0,0 +1,14 @@ +// https://github.com/jgm/pandoc/blob/29fa97ab96b8e2d62d48326e1b949a71dc41f47a/src/Text/Pandoc/Writers/HTML.hs#L332-L345 +document.addEventListener("DOMContentLoaded", function () { + var mathElements = document.getElementsByClassName("math"); + var macros = []; + for (var i = 0; i < mathElements.length; i++) { + var texText = mathElements[i].firstChild; + if (mathElements[i].tagName == "SPAN") { + katex.render(texText.data, mathElements[i], { + displayMode: mathElements[i].classList.contains("display"), + throwOnError: false, + macros: macros, + fleqn: false + }); + }}}); diff --git a/docs/lightswitch.js b/docs/lightswitch.js new file mode 100644 index 00000000..9467125a --- /dev/null +++ b/docs/lightswitch.js @@ -0,0 +1,85 @@ + +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + * Updates for {pkgdown} by the {bslib} authors, also licensed under CC-BY-3.0. + */ + +const getStoredTheme = () => localStorage.getItem('theme') +const setStoredTheme = theme => localStorage.setItem('theme', theme) + +const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +const setTheme = theme => { + if (theme === 'auto') { + document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')) + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } +} + +function bsSetupThemeToggle () { + 'use strict' + + const showActiveTheme = (theme, focus = false) => { + var activeLabel, activeIcon; + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + const buttonTheme = element.getAttribute('data-bs-theme-value') + const isActive = buttonTheme == theme + + element.classList.toggle('active', isActive) + element.setAttribute('aria-pressed', isActive) + + if (isActive) { + activeLabel = element.textContent; + activeIcon = element.querySelector('span').classList.value; + } + }) + + const themeSwitcher = document.querySelector('#dropdown-lightswitch') + if (!themeSwitcher) { + return + } + + themeSwitcher.setAttribute('aria-label', activeLabel) + themeSwitcher.querySelector('span').classList.value = activeIcon; + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document + .querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setTheme(theme) + setStoredTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +} + +setTheme(getPreferredTheme()); +bsSetupThemeToggle(); diff --git a/docs/link.svg b/docs/link.svg new file mode 100644 index 00000000..88ad8276 --- /dev/null +++ b/docs/link.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/docs/news/index.html b/docs/news/index.html new file mode 100644 index 00000000..8f8bdfca --- /dev/null +++ b/docs/news/index.html @@ -0,0 +1,413 @@ + +Changelog • mrds + Skip to contents + + +
    +
    +
    + +
    +

    mrds 3.0.0

    CRAN release: 2024-10-23

    +

    New features

    +
    • The default R optimiser when (strict) monotonicity of the detection function is enforced has been improved. Monotonicity is enforced only when the detection function has adjustment terms but does not include covariates. The new optimiser is a Sequential Least Squares Programming (SLSQP) algorithm included in the ‘nloptr’-package. This optimiser uses analytical gradients rather than approximate gradients and is therefore more robust and has improved runtime. Users can still make ddf() use the previous default R optimiser by specifying mono.method = ‘solnp’ in the ‘control’ argument. The default for mono.method is ‘slsqp’. Because of this and other small improvements and bug fixes in the monotonic optimiser, results from ddf() might change even when using the old solnp optimiser. In most cases, however, we do not expect significant changes in the estimates.
    • +

    Bug Fixes

    +
    • The summary of the fitting object now correctly prints the optimiser used when monotonicity is enforced (‘slsqp’ or ‘solnp’).
    • +
    • check.mono() now uses the same point locations as the optimiser. It also uses the same tolerance as the optimiser (1e-8) and applies this tolerance when checking (strict) monotonicity, and when checking 0 <= g(x) <= 1.
    • +
    +
    +

    mrds 2.3.0

    CRAN release: 2023-12-18

    +

    New Features

    +
    • The ‘P2’ estimator is now the default for estimating the encounter rate variance for point transect surveys. (Issue #65)
    • +

    Bug Fixes

    +
    • Re-formatted the format section of the documentation for the book.tee.data (Issue #91)
    • +
    • Ensure that the MCDS optimizer is not used for double observer models as this was generating errors. (Issue #89)
    • +
    • Improved the documentation on initial values, lower and upper bounds in both the ddf and mrds_opt documentation (mrds_opt was renamed from mrds-opt which was not accessible via ?mrds-opt). (Issue #90)
    • +
    +
    +

    mrds 2.2.9

    CRAN release: 2023-07-06

    +

    New Features

    +
    • Users can now download the fortran MCDS.exe optimiser used in Distance for Windows and fit single observer models with both the optimisers in R via # mrds and also MCDS.exe. For some datasets the optimisation with MCDS.exe is superior (giving a better likelihood) than the optimiser in R used with mrds. See ?MCDS for more details.
    • +

    Bug Fixes

    +
    • fix bug where the (true, 2nd derivative) hessian was not calculated during optimisation. This then lead to weird errors later (summary doesn’t work etc). Hessians are now calculated in this case. Thanks to Anne Provencher St-Pierre for reporting the issue
    • +
    • Fix prediction bug (Issue #84) where predicting for hazard rate model with covariates and se.fit= TRUE. Note there may be issues when predicting in this instance for binned data - check results are as expected.
    • +
    • Fix bug when a uniform model was fitted with no adjustments. This caused an error when looking for the hessian. It also required that the covariance set to 0 when estimating the cluster size standard errors (Issue #79).
    • +
    • fix bug with using binned data via cutpoints for prediction (#73)
    • +
    +
    +

    mrds 2.2.8

    CRAN release: 2022-11-16

    +
    • Fix bug where plotting rem.fi models when truncation was used would lead to an error being thrown. (#58)
    • +
    • Fix bugs when a uniform is fitted with no adjustments (#59)
    • +
    • Fix bug in plotting when left truncation was used and points didn’t match detection function line (Distance #134)
    • +
    • Fix bug in debug reporting when uniform only models are used (Distance #136)
    • +
    • Fix bug in adjustment term fitting where width scaling was defined as right minus left truncation, rather than just the right truncation value (Distance #133)
    • +
    • Use (0,width) as the interval for monotonicity checks, rather than (left, width) as this was causing issues and is not consistent with Distance for Windows (Distance #135)
    • +
    • Expose mono.outer.iter option to control number of outer iterations used to fit a monotonic model. Default 200.
    • +
    • Make dht output tables consistent. Now always refers to Region in the display (rather than Region in summary and Label in N/D tables). Note this is only a display change so won’t break code which looks to extract these values based on column names from the dht object which is unchanged.
    • +
    • Fixed bug leading to erroneous zero totals in individuals N/D tables when there were no sightings in one or more strata. Bug was apparent when the data were sightings of clusters and the varflag 1 option (er_method = 1 in Distance ds function) was selected in the dht function.
    • +
    +
    +

    mrds 2.2.7

    CRAN release: 2022-08-20

    +
    • Fix bug in check for # parameters < # data. Thanks to Anne Provencher St-Pierre.
    • +
    • No longer display errors caused by solnp/gosolnp when doing constrained optimisation, these can be seen when showit>0 if necessary.
    • +
    • EXPERIMENTAL change to use fixed grid starting values when using monotonicity constraints, set control$mono.random.start=TRUE to get old behaviour
    • +
    • Scale covariates absolutely rather than relatively during optimisation.
    • +
    • Expected.S element of dht return now a data.frame not a list
    • +
    • Fix total encounter rate and its variance in stratified analysis
    • +
    +
    +

    mrds 2.2.6

    CRAN release: 2022-03-17

    +
    • Individuals summary table for dht now includes k (number of transects)
    • +
    • Add effective detection radius (EDR) and its uncertainty to summary output
    • +
    • Change default rounding of chi-squared test tables. This can be customized using print(ddf.gof(…), digits=?) for e.g., printing with knitr::kable
    • +
    • New detection function: two-part normal (“tpn”), useful for aerial surveys in mountainous terrain, see Becker EF, Christ AM (2015) A Unimodal Model for Double Observer Distance Sampling Surveys. PLOS ONE 10(8): e0136403. https://doi.org/10.1371/journal.pone.0136403 and ?“two-part-normal”.
    • +
    • To improve consistency in functions and arguments in the package, some functions will change from . separation to _. For now both versions exist but will be removed in # mrds 2.2.7. +
      • add_df_covar_line -> add.df.covar.line
      • +
      • p_dist_table -> p.dist.table
      • +
    • +
    • Variable strip widths are now supported in dht. Users should supply an additional column to the sample data.frame (“CoveredArea”) giving the total area covered in the given transect and set options=list(areas.supplied=TRUE). Thanks to Megan Ferguson for providing an example, code and feedback.
    • +
    +
    +

    mrds 2.2.5

    CRAN release: 2021-07-01

    +
    • use “probabalists” definition of Hermite polynomials, as from Distance. More numerically stable
    • +
    • remove setting of Hermite parameter to 1 (unclear why this was the case!)
    • +
    • refinement of adjustment-key-all outer optimisation, optimization is now only over the subset of parameters, rather than holding one parameter constant
    • +
    • refine outer optimization, using best previous values (by likelihood) rather than last values. Use optimizer’s convergence diagnostic to assess outer convergence.
    • +
    • Refinement of “inner” optimization (detfct.fit.opt): (1) simplification of stopping rules (one while() loop rather than two), (2) parameters are nudged only when bounds have not been hit, if bounds have been hit then they are expanded
    • +
    • Rescaling of covariate models’ parameters (when scaling difference was large) was inverted, causing all kinds of issues.
    • +
    • Made the scaling kick-in at smaller scales.
    • +
    • Removed inner (detfct.fit.opt) while() loop dependence on bounded status, since that didn’t seem to make sense
    • +
    • Stop “correcting” infinite/NaN integrals to small numbers as this was misleading the optimizer to think these were “good” values
    • +
    • Refine constrained optimisation to use actual starting values once, then use random start points and compare the two.
    • +
    • handle the case where a model failed in AIC adjustment term selection, montonicity check would throw an error
    • +
    • assign g(x)=0 for g(x)<0 when integrating the detection function (but check post-optimisation that this is not a problem!)
    • +
    • fix bug in predict.ds when uniform key was used with binned data (Thanks to Noémie Cappelle for reporting this issue!)
    • +
    • dht now prints additional information about the variance estimators used
    • +
    • errors now thrown when more parameters than data (either unique distance values or bins)
    • +
    +
    +

    mrds 2.2.4

    CRAN release: 2020-12-01

    +
    • add_df_covar_line now plots probability density functions for the point transect case
    • +
    • warning is no longer raised when truncation is not set but bins are specified for binned data (it’s assumed that the furthest cutpoint is the truncation)
    • +
    • AIC/logLik functions now work for all methods
    • +
    +
    +

    mrds 2.2.3

    CRAN release: 2020-07-31

    +
    • fix bug where region areas were not duplicated properly when density was estimated (using Area=0 in data)
    • +
    • fix a bug in getting starting values for hazard-rate detection functions when point transect data is used
    • +
    • fix issue with left truncation when estimating abundance/density in dht
    • +
    +
    +

    mrds 2.2.2

    CRAN release: 2020-05-12

    +
    • fix issue in predict() when uniform key functions are used with new data.
    • +
    • new function p_dist_table() to show the distribution of estimated probabilities of detection. Useful for covariate models to determine issues with very small ps.
    • +
    • new function add_df_covar_line(), which can be used to add lines plots showing the detection function for a given covariate combination. Thanks to various members of the distance sampling mailing list for this suggestion.
    • +
    • plots produced by plot.ds/plot.rem/plot.rem.fi/plot.trial/plot.trial.fi/plot.io/plot.io.fi/plot.det.tables now use same defaults as R 4.0.0 (“lightgrey” bars for histograms). Some deprecated arguments to plot.ds were removed.
    • +
    +
    +

    mrds 2.2.1

    CRAN release: 2020-01-22

    +
    • hessian now returned when solnp (constrained optimisation) is used to fit the detection function
    • +
    • Check for NA covariate values, thanks to Ana Cañadas for highlighting this issue.
    • +
    • enable P2 variance estimator for points
    • +
    • Corrected handling of NA covariates
    • +
    • new option se.fit for predict.ds to obtain standard errors for the probability of detection or ESW
    • +
    • Fixed a bug in dht when left truncation is used. Previously left truncation was ignored. See https://github.com/DistanceDevelopment/mrds/issues/22 thanks to Carl Schwarz for finding this bug.
    • +
    • Fix bug where two objects could have a missing observer and no error was thrown. Thanks to Ainars Aunins for reporting this bug and Eric Rexstad for diagnosing.
    • +
    +
    +

    mrds 2.2.0

    CRAN release: 2018-06-27

    +
    • fixed bug in calculation of Kolmogorov-Smirnov p-values. Previous methods did not take into account that parameters of the detection function were estimated, so a new bootstrap-based approach has been implemented. As this is time-consuming, the Kolmogorov-Smirnov test is no longer performed by default (use ks=TRUE to get the test).
    • +
    • Encounter rate variance for point transects when points were not all sampled an equal number of times was incorrect. # mrds now uses the P3 estimator from Fewster et al (2009) for point transect encounter rate variance.
    • +
    • Bug in predicting when left truncation is used. Previously if the distance column in the new data was set to zero and left truncation was > 0 predictions were discarded, this was particularly problematic for io, etc # mrds models. Thanks to Natalie Kelly for spotting this and suggesting a fix.
    • +
    • Add errors when “P3” is used as an encounter rate variance estimator with non-point transect data, throws a warning and switches to P3 for points when it’s not specified.
    • +
    +
    +

    mrds 2.1.18

    CRAN release: 2017-07-04

    +
    • fixed bug in parameter rescaling where scales were incorrectly entered as 1 due to an indexing bug
    • +
    • Quantile-quantile plots now use an aspect ratio of 1
    • +
    • Bug in half-normal integration code when no adjustments are used lead to likelohood being evaluated incorrectly for models with binned (grouped) distances. This only effected AIC comparisons between models and parameter estimates should have been the same. Thanks to Olivier Devineau for spotting this!
    • +
    • Fix bug where predict.ds() didn’t work with uniform keys. Thanks to Jason Roberts for reporting this bug.
    • +
    • Correctly specify distbegin/distend for predictions with binned data, thanks to Jason Roberts for spotting this bug.
    • +
    • Let the user know that int.range was set in summary() results
    • +
    +
    +

    mrds 2.1.17

    CRAN release: 2016-10-03

    +
    • fixed starting value bug for hazard-rate models when distances are binned. Thanks to Natalia Schroeder and Eric Rexstad for discovering this.
    • +
    • predict.ds now uses numerical integration to calculate integrals (rather than an approximation). Thanks to Eric Rexstad for spotting an issue with goodness of fit testing that highlighted this.
    • +
    • plot.ds() now accepts an xlab=“” argument to change the x axis label. Thanks to Steve Ahlswede for suggesting this.
    • +
    +
    +

    mrds 2.1.16

    CRAN release: 2016-08-10

    +
    • improved predict() method now does the Right Thing with factors
    • +
    • Fixed bug in scaling of histograms for point transect pdf plots and points on those plots. Thanks to Erics Howe and Rexstad for reporting these issues.
    • +
    • You can now set y axis limits when using plot.ds, defaults should be more sensible for pt+point models. Thanks to Eric Howe for the suggestion.
    • +
    • Fixed bug when setting initial values that threw many errors. Thanks to Laura Marshall for spotting this.
    • +
    +
    +

    mrds 2.1.15

    +
    • rescaling parameters were not correct, now fixed. Thanks to Laura Marshall for spotting this.
    • +
    • coefficients are called coefficients (not a mixture of coefficients and parameters) in summary() results
    • +
    • speed-up in io.fi models (thanks to Winston Chang’s profvis, showing many unecessary calls to model.matrix)
    • +
    • plot.ds now has a pdf= option to plot the probability density function (for point transect models only)
    • +
    • assign.par, create.ddfobj and detfct are now exported, so it can be used by dsm (though shouldn’t be used by anything else!)
    • +
    • fixed bug in left truncation where probability of detection was not calculated correctly. Thanks to Jason Roberts for pointing this out!
    • +
    +
    +

    mrds 2.1.14

    CRAN release: 2015-07-29

    +
    • updated initialvalues calculation for hazard-rate – now uses Beavers & Ramsay method to scale parameters for hazard-rate
    • +
    • automatic parameter rescaling for covariate models when covariates are poorly scaled. Now default for nlminb method
    • +
    • minor speed-up to logistic code when distance is a covariate
    • +
    +
    +

    mrds 2.1.13

    +
    • link to distance sampling Google Groups in help
    • +
    • duplicate non-convergence warning/error removed
    • +
    • warning of singular Hessian is now a warning()
    • +
    • re-wrote the debug output to be easier to read
    • +
    • dht now has an option (ci.width) to specify confidence interval width in output (thanks to David Pavlacky for the suggestion)
    • +
    • monotonicity now operates over left->right truncation for models that are left truncated and will fail with an error message if many integration intervals are used. Thanks to Tiago Marques for highlighting this issue.
    • +
    +
    +

    mrds 2.1.12

    CRAN release: 2015-02-05

    +
    • examples are now .
    • +
    +
    +

    mrds 2.1.11

    +
    • Bug in unif+cos(1) models when using monotonicity constraints and randomised starting points. Since the model only has 1 parameter, there is a bug in selecting columns in Rsolnp starting value code that makes the result be a vector, which then doesn’t work with an apply later. Workaround of not using randomised starting values in # mrds for that model. Thanks to Nathalie Cavada for finding this bug.
    • +
    • Fixed bug in pdot.dsr.integrate.logistic which was giving incorrect AIC values for FI models with binned data for points or lines.
    • +
    • Fixed issue where returned optimisation obejct got accessed without being checked to see if it’s result was an error, causing problems when encapsulating ddf in other functions.
    • +
    +
    +

    mrds 2.1.10

    CRAN release: 2014-09-27

    +
    • added testing directory to .Rbuildignore, tests are now not included in built packages and are not run on CRAN. For tests use the source packages on github.
    • +
    +
    +

    mrds 2.1.9

    +

    BUG FIXES

    +
    • removed test that failed on CRAN’s testing
    • +
    +
    +

    mrds 2.1.8

    CRAN release: 2014-09-16

    +

    CHANGES * removed doeachint/cgftab code, which used a spline approximation to the effective strip width/effective area when a half-normal detection function was used. This has been replaced with exact calculation via the error function (erf). * tests updated accordingly * monotonically constrained models now use a bunch of random start points – uses gosolnp() from Rsolnp * re-fitting by jiggling parameters refined to multiply by a uniform variable with limits set as the upper and lower bounds (+/-1) so jiggling can go either way, on approximately the same scale as the parameters * corrected documentation for predict methods, which incorrectly stated what is returned for point transect models. Thanks to Thibault Dieuleveut for spotting this.

    +

    BUG FIXES

    +
    • fixed 2 bugs in create.varstructure; the first was for removal method which was being treated as a trial method. The second was when obs.table was not specified (Region and sample labels in dataframe for each obs) and there was dual observers. In that case it was doubling the number of observations.
    • +
    • fixed a bug in dht.deriv which had not been setup for removal; thanks to John Boulanger for noticing and reporting both of these bugs
    • +
    +
    +

    mrds 2.1.7

    +

    BUG FIXES

    +
    • Standardisation was being applied to detection functions (such that g(0)=1) when there were no adjustments (which is uneccesary) but also caused issues when using gamma detection functions as this should be calculated at g(apex) instead. Standardisation code has been removed for when there are no adjustments and the correct scaling used for the gamma when there are. Thanks to Thomas Doniol-Valcroze for alerting us to this bug.
    • +
    • Partial name-matching in dht was fixed. Produced warning but not error.
    • +

    NEW FEATURES

    +
    • Tests for gamma detection functions
    • +
    • Observations are automatically ordered by object and observer fields (if included) in ddf as expected by double observer analysis. A erroneous error message can be created if they are not ordered correctly or worse. Thanks to Ainars Aunins for bringing this to our attention.
    • +
    • Added function create_document() which will run a shiny application interface to # mrds and will create a knitr document from a template. The template currently is only for a single observer analysis and is behind on all of the features for the app which is fairly complete.
    • +
    +
    +

    mrds 2.1.6

    CRAN release: 2014-06-11

    +

    BUG FIXES

    +
    • some key+adjustment models failed to converge due to bugs in the optimisation code (mainly unif+cosine models)
    • +

    NEW FEATURES

    +
    • optimisation tips help page at ?“mrds-opt”
    • +
    +
    +

    mrds 2.1.5

    CRAN release: 2014-04-22

    +

    CHANGES * models with both adjustment terms and covariates are now allowed * mono.check function checks that a detection function is monotonic over its range (at the observed covariate combinations if covariates are included)

    +
    +
    +

    mrds 2.1.4-5

    +

    CHANGES

    +
    • new testthat changes test locations etc, this has been sorted out.
    • +
    • which= argument in plot.* now sorts the which first, so plots will always be in order
    • +
    • plot.ds is now more friendly to par() users, thanks to Jason Roberts for the pointer
    • +

    BUG FIXES

    +
    • uniform+cosine detection functions were ignored when using monotonicity constraints, now they can be used together
    • +
    • mono.strict=TRUE didn’t automatically turn on mono=TRUE, extra logic to correct this
    • +
    • montonicity constraints did not use standardised (g(x)/g(0) detection functions, so if g(x)>1 monotonicity constraints were voilated. Now standardised detection functions are used. Thanks to Len Thomas for noticing this bug.
    • +
    +
    +

    mrds 2.1.4-3

    +

    BUG FIX

    +
    • predict.io.fi did not work for new data (thanks to Len Thomas and Phil Hammond for pointing this out)
    • +

    CHANGES

    +
    • general documentation updates
    • +
    • simplication and re-structuring of internals
    • +
    +
    +

    mrds 2.1.4-3

    +

    CHANGES

    +
    • internal re-structuring of summary methods
    • +
    • more tests
    • +
    +
    +

    mrds 2.1.4-2

    +

    CHANGES

    +
    • plot.ds now has a new argument, if TRUE (default) it will create a new window for each plot.
    • +
    • general janitorial work inside plotting methods, removing and simplifying old code; (hopefully) no new features.
    • +
    +
    +

    mrds 2.1.4-1

    +

    CHANGES

    +
    • Warning now issued when truncation is set to the largest distance by default.
    • +
    • updated dht documentation
    • +
    +
    +

    mrds 2.1.4

    CRAN release: 2013-09-23

    +

    CHANGES

    +
    • modified det.tables and plot.det.tables so it does not create and plot some tables depending on observer configuration (io,trial,removal).
    • +
    • to plot functions (other than plot.ds) added argument subtitle=TRUE (default). It can be either TRUE, FALSE. If TRUE it shows sub-titles for plot type. If FALSE, no subtitles are shown. With this argument it is possible to get subtitles without main title.
    • +
    • set iterlimit=1 in call to rem.glm from ddf.rem.fi to prevent convergence issues in getting starting values.
    • +
    • created average.line.cond and it is now used in place of calcp.# mrds which was computing average line for conditional detection function by weighting values by estimated population proportions for each covariate value. It is now weighted by sample proportions (mean value).
    • +
    +
    +

    mrds 2.1.3-1

    +

    BUG FIXES

    +
    • patched dht.se so if vc1=NA it will not fail
    • +
    • patched plot.ds to only issue dev.new when not using another graphics device so it plays nice with Distance.
    • +
    +
    +

    mrds 2.1.3

    CRAN release: 2013-08-13

    +

    BUG FIXES

    +
    • patched bug in dht which was returning incorrect values in bysample for sample.area and Dhat.
    • +
    • patched code in dht.se so it would skip over variance component for p when key=unif and p=1.
    • +

    CHANGES

    +
    • modified code in detfct.fit.opt and io and rem functions to adapt to changes in optimx
    • +
    • removed old depends statements to optimx and Rsolnp; uses import
    • +
    +
    +

    mrds 2.1.2

    CRAN release: 2013-06-26

    +

    BUG FIXES

    +
    • fixed usage and example lines that were too long
    • +
    +
    +

    mrds 2.1.1

    +

    BUG FIXES

    +
    • for full independence methods, the calculation for the distance sampling component was for unbinned data only. Code has been added to compute this component correctly for binned data. This required changes to each of the ddf.x.fi routines and for the logistic integration routines.
    • +

    CHANGES

    +
    • Modified flpt.lnl code to set integrals to 1E-25 if <=0
    • +
    • In integrate.pdf a vector argument for the integration range is converted to matrix if of length 2.
    • +
    • ddf.gof will now use breaks set for binned data unless others are specified.
    • +

    NEW FEATURES

    +
    • Added threshold detection functions (“th1” and “th2”) which required some minor changes in other functions for summary/print.
    • +
    • Added xlab and ylab arguments to plot functions to over-ride default labels
    • +
    +
    +

    mrds 2.1.0

    CRAN release: 2012-12-11

    +

    CHANGES

    +
    • Modified DESCRIPTION so only R 2.15 or greater is allowed. Needed for optimHess jll(12/10/2012)
    • +
    +
    +

    mrds 2.0.9

    CRAN release: 2012-12-04

    +

    NEW FEATURES

    +
    • New option plot=TRUE/FALSE in qqplot.ddf(), for when you only want the K-S and CvM test statistics, not plotting. dlm(11/13/2012)
    • +

    BUG FIXES

    +
    • Fixed problem when obs dataframe in call to dht (which links observations to samples and regions) contained fields also in observation dataframe. Now only fields needed from obs are selected before merge. dlm(11/13/2012)
    • +
    +
    +

    mrds 2.0.8

    +
    • Unchanged version sent out with Distance in summer 2012
    • +
    +
    +

    mrds 2.0.7

    +

    NEW FEATURES

    +
    • Restructured likelihood/integration code for fitting ds models
    • +
    • Adjustment functions will now work with binned data. Code was added to assure that fields distbegin and distend are available if binned=TRUE and breaks are set as well.
    • +
    • Added argument adj.exp which if set to TRUE will use keyexp(adj) rather than keyadj to keep f(x)>0
    • +
    • Added following restrictions for adjustments: if uniform key, adj.scale must be “width”; if non-uniform key and adj.scale=“width”, doeachint set to TRUE because scale integration will not work.
    • +
    • Changed code in several functions so a uniform key with no adjustment functions could be used.
    • +
    • New option plot=TRUE/FALSE in qqplot.ddf(), for when you only want the K-S and CvM test statistics, not plotting.
    • +

    BUG FIXES

    +
    • Fixed inconsistencies in use and documentation of showit argument
    • +
    • Fixed a bug where groups were not recognised in dht() when the size column occurred in both model data and observation table. (Thanks to Darren Kidney for spotting this.)
    • +
    +
    +

    mrds 2.0.6

    +

    NEW FEATURES

    +
    • Example code for binned point count data added to help for ddf
    • +
    • Modified ddf.rem.fi and ddf.io.fi to use starting values from iterative offset glm to make optimization more robust
    • +
    • Added a restriction so no one attempts fitting adjustment functions with covariates.
    • +
    • Added some code to assure all of the necessary fields are available for binned data (binned=TRUE).
    • +

    BUG FIXES

    +
    • Patched create.ddfobj so that point counts with binned data would work properly
    • +
    • Patched ddf.ds such that stored data in object$data has detected=1
    • +
    • Patched ddf.io.fi to throw an error when optimx() does not converge
    • +
    • Patched ddf.io.fi and ddf.rem.fi so inclusion of factor(observer) will work in formula
    • +
    • Patched dht, dht.se and covered.region.dht so it would handle 0 observations
    • +
    • Suppress package messages from optimx
    • +
    • Patched fpt.lnl, flt.lnl, print.ddf, model.description, summary.ds, print.summary.ds and coef.io, coef.trial, coef.rem, plot.io, plot.trial, and plot.rem to handle uniform key function.
    • +
    +
    +

    mrds 2.0.5

    CRAN release: 2012-03-27

    +

    NEW FEATURES

    +
    • First version submitted to CRAN
    • +

    BUG FIXES

    +
    • Fixed code in dht.se such that it uses sample size from detection model in Satterthwaite approximation rather than size of selected subset of observations.
    • +
    • Fixed coef functions so they would return parameter estimates for adjustment functions if any.
    • +
    +
    +

    mrds 2.0.4

    +

    BUG FIXES

    +
    • Changed flt.var to compute variance of average p correctly for point transects.
    • +
    • Numerous changes by dlm to optimization code
    • +
    • Changes to documentation to remove non-ASCII characters
    • +
    +
    +

    mrds 2.0.3

    +

    NEW FEATURES

    +
    • Major rewrite to ddf and summary functions to handle adjustment functions
    • +

    BUG FIXES

    +
    • Changes to det.tables and gof functions to use include.lowest=TRUE in calls to cut function
    • +
    • Changed all usage of T and F to TRUE and FALSE
    • +
    +
    +

    mrds 2.0.2

    +
    • For changes in 2.0.2 and earlier see ONEWS
    • +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/pkgdown.js b/docs/pkgdown.js new file mode 100644 index 00000000..1a99c65f --- /dev/null +++ b/docs/pkgdown.js @@ -0,0 +1,162 @@ +/* http://gregfranko.com/blog/jquery-best-practices/ */ +(function($) { + $(function() { + + $('nav.navbar').headroom(); + + Toc.init({ + $nav: $("#toc"), + $scope: $("main h2, main h3, main h4, main h5, main h6") + }); + + if ($('#toc').length) { + $('body').scrollspy({ + target: '#toc', + offset: $("nav.navbar").outerHeight() + 1 + }); + } + + // Activate popovers + $('[data-bs-toggle="popover"]').popover({ + container: 'body', + html: true, + trigger: 'focus', + placement: "top", + sanitize: false, + }); + + $('[data-bs-toggle="tooltip"]').tooltip(); + + /* Clipboard --------------------------*/ + + function changeTooltipMessage(element, msg) { + var tooltipOriginalTitle=element.getAttribute('data-bs-original-title'); + element.setAttribute('data-bs-original-title', msg); + $(element).tooltip('show'); + element.setAttribute('data-bs-original-title', tooltipOriginalTitle); + } + + if(ClipboardJS.isSupported()) { + $(document).ready(function() { + var copyButton = ""; + + $("div.sourceCode").addClass("hasCopyButton"); + + // Insert copy buttons: + $(copyButton).prependTo(".hasCopyButton"); + + // Initialize tooltips: + $('.btn-copy-ex').tooltip({container: 'body'}); + + // Initialize clipboard: + var clipboard = new ClipboardJS('[data-clipboard-copy]', { + text: function(trigger) { + return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); + } + }); + + clipboard.on('success', function(e) { + changeTooltipMessage(e.trigger, 'Copied!'); + e.clearSelection(); + }); + + clipboard.on('error', function(e) { + changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); + }); + + }); + } + + /* Search marking --------------------------*/ + var url = new URL(window.location.href); + var toMark = url.searchParams.get("q"); + var mark = new Mark("main#main"); + if (toMark) { + mark.mark(toMark, { + accuracy: { + value: "complementary", + limiters: [",", ".", ":", "/"], + } + }); + } + + /* Search --------------------------*/ + /* Adapted from https://github.com/rstudio/bookdown/blob/2d692ba4b61f1e466c92e78fd712b0ab08c11d31/inst/resources/bs4_book/bs4_book.js#L25 */ + // Initialise search index on focus + var fuse; + $("#search-input").focus(async function(e) { + if (fuse) { + return; + } + + $(e.target).addClass("loading"); + var response = await fetch($("#search-input").data("search-index")); + var data = await response.json(); + + var options = { + keys: ["what", "text", "code"], + ignoreLocation: true, + threshold: 0.1, + includeMatches: true, + includeScore: true, + }; + fuse = new Fuse(data, options); + + $(e.target).removeClass("loading"); + }); + + // Use algolia autocomplete + var options = { + autoselect: true, + debug: true, + hint: false, + minLength: 2, + }; + var q; +async function searchFuse(query, callback) { + await fuse; + + var items; + if (!fuse) { + items = []; + } else { + q = query; + var results = fuse.search(query, { limit: 20 }); + items = results + .filter((x) => x.score <= 0.75) + .map((x) => x.item); + if (items.length === 0) { + items = [{dir:"Sorry 😿",previous_headings:"",title:"No results found.",what:"No results found.",path:window.location.href}]; + } + } + callback(items); +} + $("#search-input").autocomplete(options, [ + { + name: "content", + source: searchFuse, + templates: { + suggestion: (s) => { + if (s.title == s.what) { + return `${s.dir} >
    ${s.title}
    `; + } else if (s.previous_headings == "") { + return `${s.dir} >
    ${s.title}
    > ${s.what}`; + } else { + return `${s.dir} >
    ${s.title}
    > ${s.previous_headings} > ${s.what}`; + } + }, + }, + }, + ]).on('autocomplete:selected', function(event, s) { + window.location.href = s.path + "?q=" + q + "#" + s.id; + }); + }); +})(window.jQuery || window.$) + +document.addEventListener('keydown', function(event) { + // Check if the pressed key is '/' + if (event.key === '/') { + event.preventDefault(); // Prevent any default action associated with the '/' key + document.getElementById('search-input').focus(); // Set focus to the search input + } +}); diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml new file mode 100644 index 00000000..164577b0 --- /dev/null +++ b/docs/pkgdown.yml @@ -0,0 +1,6 @@ +pandoc: '3.5' +pkgdown: 2.1.1 +pkgdown_sha: ~ +articles: + mrds-golftees: mrds-golftees.html +last_built: 2024-11-18T16:41Z diff --git a/docs/reference/AIC.ddf.html b/docs/reference/AIC.ddf.html new file mode 100644 index 00000000..dc4d3ac7 --- /dev/null +++ b/docs/reference/AIC.ddf.html @@ -0,0 +1,90 @@ + +Akaike's An Information Criterion for detection functions — AIC.ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Extract the AIC from a fitted detection function.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ddf'
    +AIC(object, ..., k = 2)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a fitted detection function object

    + + +
    ...
    +

    optionally more fitted model objects.

    + + +
    k
    +

    penalty per parameter to be used; the default k = 2 is the +"classical" AIC

    + +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/DeltaMethod.html b/docs/reference/DeltaMethod.html new file mode 100644 index 00000000..8f6833c1 --- /dev/null +++ b/docs/reference/DeltaMethod.html @@ -0,0 +1,134 @@ + +Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes delta method variance-covariance matrix of results of any generic +function fct that computes a vector of estimates as a function of a +set of estimated parameters par.

    +
    + +
    +

    Usage

    +
    DeltaMethod(par, fct, vcov, delta, ...)
    +
    + +
    +

    Arguments

    + + +
    par
    +

    vector of parameter values at which estimates should be constructed

    + + +
    fct
    +

    function that constructs estimates from parameters par

    + + +
    vcov
    +

    variance-covariance matrix of the parameters

    + + +
    delta
    +

    proportional change in parameters used to numerically estimate +first derivative with central-difference formula (ignored)

    + + +
    ...
    +

    any additional arguments needed by fct

    + +
    +
    +

    Value

    +

    a list with values

    +
    variance
    +

    estimated variance-covariance +matrix of estimates derived by fct

    +
    partial
    +

    matrix (or +vector) of partial derivatives of fct with respect to the parameters +par

    + +
    +
    +

    Details

    +

    The delta method (aka propagation of errors is based on Taylor series +approximation - see Seber's book on Estimation of Animal Abundance). It uses +the first derivative of fct with respect to par. +It also uses the variance-covariance matrix of the estimated parameters +which is derived in estimating the parameters and is an input argument.

    +

    The first argument of fct should be par which is a vector of +parameter estimates. It should return a single value (or vector) of +estimate(s). The remaining arguments of fct if any can be passed to +fct by including them at the end of the call to DeltaMethod as +name=value pairs.

    +
    +
    +

    Note

    +

    This is a generic function that can be used in any setting beyond the +mrds package. However this is an internal function for mrds +and the user does not need to call it explicitly.

    +
    +
    +

    Author

    +

    Jeff Laake and David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/NCovered.html b/docs/reference/NCovered.html new file mode 100644 index 00000000..2c90e3cb --- /dev/null +++ b/docs/reference/NCovered.html @@ -0,0 +1,97 @@ + +Compute estimated abundance in covered (sampled) region — NCovered • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Generic function that computes abundance within the covered region. It +calls method (class) specific functions for the computation.

    +
    + +
    +

    Usage

    +
    NCovered(par, model = NULL, group = TRUE)
    +
    + +
    +

    Arguments

    + + +
    par
    +

    parameter values (used when computing derivatives wrt parameter +uncertainty); if NULL parameter values in model are used

    + + +
    model
    +

    ddf model object

    + + +
    group
    +

    if TRUE computes group abundance and if FALSE individual +abundance

    + +
    +
    +

    Value

    +

    abundance estimate

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png new file mode 100644 index 00000000..099246db Binary files /dev/null and b/docs/reference/Rplot001.png differ diff --git a/docs/reference/Rplot002.png b/docs/reference/Rplot002.png new file mode 100644 index 00000000..07f643a2 Binary files /dev/null and b/docs/reference/Rplot002.png differ diff --git a/docs/reference/Rplot003.png b/docs/reference/Rplot003.png new file mode 100644 index 00000000..a5770870 Binary files /dev/null and b/docs/reference/Rplot003.png differ diff --git a/docs/reference/Rplot004.png b/docs/reference/Rplot004.png new file mode 100644 index 00000000..46208012 Binary files /dev/null and b/docs/reference/Rplot004.png differ diff --git a/docs/reference/Rplot005.png b/docs/reference/Rplot005.png new file mode 100644 index 00000000..1c6fda18 Binary files /dev/null and b/docs/reference/Rplot005.png differ diff --git a/docs/reference/Rplot006.png b/docs/reference/Rplot006.png new file mode 100644 index 00000000..11ea4386 Binary files /dev/null and b/docs/reference/Rplot006.png differ diff --git a/docs/reference/Rplot007.png b/docs/reference/Rplot007.png new file mode 100644 index 00000000..8297589b Binary files /dev/null and b/docs/reference/Rplot007.png differ diff --git a/docs/reference/Rplot008.png b/docs/reference/Rplot008.png new file mode 100644 index 00000000..6820e65b Binary files /dev/null and b/docs/reference/Rplot008.png differ diff --git a/docs/reference/add.df.covar.line.html b/docs/reference/add.df.covar.line.html new file mode 100644 index 00000000..607b623f --- /dev/null +++ b/docs/reference/add.df.covar.line.html @@ -0,0 +1,165 @@ + +Add covariate levels detection function plots — add.df.covar.line • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Add a line or lines to a plot of the detection function which correspond to +a a given covariate combination. These can be particularly useful when there +is a small number of factor levels or if quantiles of a continuous covariate +are specified.

    +
    + +
    +

    Usage

    +
    add.df.covar.line(ddf, data, ndist = 250, pdf = FALSE, breaks = "Sturges", ...)
    +
    +add_df_covar_line(ddf, data, ndist = 250, pdf = FALSE, breaks = "Sturges", ...)
    +
    + +
    +

    Arguments

    + + +
    ddf
    +

    a fitted detection function object.

    + + +
    data
    +

    a data.frame with the covariate combination you want to +plot.

    + + +
    ndist
    +

    number of distances at which to evaluate the detection function.

    + + +
    pdf
    +

    should the line be drawn on the probability density scale; +ignored for line transects.

    + + +
    breaks
    +

    required to ensure that PDF lines are the right size, should +match what is supplied to original plot command. Defaults to +"Sturges" breaks, as in hist. Only used if pdf=TRUE.

    + + +
    ...
    +

    extra arguments to give to line (lty, +lwd, col).

    + +
    +
    +

    Value

    +

    invisibly, the values of detectability over the truncation range.

    +
    +
    +

    Details

    +

    All covariates must be specified in data. Plots can become quite busy +when this approach is used. It may be useful to fix some covariates at their +median level and plot set values of a covariate of interest. For example +setting weather (e.g., Beaufort) to its median and plotting levels of +observer, then creating a second plot for a fixed observer with levels of +weather.

    +

    Arguments to lines are supplied in ... and aesthetics like +line type (lty), line width (lwd) and colour (col) are +recycled. By default lty is used to distinguish between the lines. It +may be useful to add a legend to the plot (lines are plotted +in the order of data).

    +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +# fit an example model
    +data(book.tee.data)
    +egdata <- book.tee.data$book.tee.dataframe
    +result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~sex),
    +              data = egdata[egdata$observer==1, ], method = "ds",
    +              meta.data = list(width = 4))
    +
    +# make a base plot, showpoints=FALSE makes the plot less busy
    +plot(result, showpoints=FALSE)
    +
    +# add lines for sex one at a time
    +add.df.covar.line(result, data.frame(sex=0), lty=2)
    +add.df.covar.line(result, data.frame(sex=1), lty=3)
    +
    +# add a legend
    +legend(3, 1, c("Average", "sex==0", "sex==1"), lty=1:3)
    +
    +# alternatively we can add both at once
    +# fixing line type and varying colour
    +plot(result, showpoints=FALSE)
    +add.df.covar.line(result, data.frame(sex=c(0,1)), lty=1,
    +                  col=c("red", "green"))
    +# add a legend
    +legend(3, 1, c("Average", "sex==0", "sex==1"), lty=1,
    +       col=c("black", "red", "green"))
    +} # }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.check.order.html b/docs/reference/adj.check.order.html new file mode 100644 index 00000000..4994dcce --- /dev/null +++ b/docs/reference/adj.check.order.html @@ -0,0 +1,114 @@ + +Check order of adjustment terms — adj.check.order • mrds + Skip to contents + + +
    +
    +
    + +
    +

    'adj.check.order' checks that the Cosine, Hermite or simple polynomials are +of the correct order.

    +
    + +
    +

    Usage

    +
    adj.check.order(adj.series, adj.order, key)
    +
    + +
    +

    Arguments

    + + +
    adj.series
    +

    Adjustment series used +('cos','herm','poly')

    + + +
    adj.order
    +

    Integer to check

    + + +
    key
    +

    key function to be used with this adjustment series

    + +
    +
    +

    Value

    +

    Nothing! Just calls stop if something goes wrong.

    +
    +
    +

    Details

    +

    Only even functions are allowed as adjustment terms, per p.47 of Buckland et +al (2001). If incorrect terms are supplied then an error is throw via +stop.

    +
    +
    +

    References

    +

    S.T.Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake. 1993. + Robust Models. In: Distance Sampling, eds. S.T.Buckland, D.R.Anderson, + K.P. Burnham, J.L. Laake. Chapman & Hall.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    David Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.cos.html b/docs/reference/adj.cos.html new file mode 100644 index 00000000..fd1bfd23 --- /dev/null +++ b/docs/reference/adj.cos.html @@ -0,0 +1,96 @@ + +Cosine adjustment term, not the series. — adj.cos • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.cos(distance, scaling, adj.order)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + +
    +
    +

    Value

    +

    scalar or vector containing the cosine adjustment term for every +value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.herm.html b/docs/reference/adj.herm.html new file mode 100644 index 00000000..41e0443a --- /dev/null +++ b/docs/reference/adj.herm.html @@ -0,0 +1,96 @@ + +Hermite polynomial adjustment term, not the series. — adj.herm • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.herm(distance, scaling, adj.order)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + +
    +
    +

    Value

    +

    scalar or vector containing the Hermite adjustment term for every +value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.poly.html b/docs/reference/adj.poly.html new file mode 100644 index 00000000..538c116f --- /dev/null +++ b/docs/reference/adj.poly.html @@ -0,0 +1,96 @@ + +Simple polynomial adjustment term, not the series. — adj.poly • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.poly(distance, scaling, adj.order)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + +
    +
    +

    Value

    +

    scalar or vector containing the polynomial adjustment term for every +value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.series.grad.cos.html b/docs/reference/adj.series.grad.cos.html new file mode 100644 index 00000000..37ce012e --- /dev/null +++ b/docs/reference/adj.series.grad.cos.html @@ -0,0 +1,110 @@ + +Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.series.grad.cos(
    +  distance,
    +  scaling = 1,
    +  adj.order,
    +  adj.parm = NULL,
    +  adj.exp = FALSE
    +)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + + +
    adj.parm
    +

    vector of parameters (a_j)

    + + +
    adj.exp
    +

    boolean, defaults to FALSE

    + +
    +
    +

    Value

    +

    scalar or vector containing the gradient of the cosine adjustment +series for every value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.series.grad.herm.html b/docs/reference/adj.series.grad.herm.html new file mode 100644 index 00000000..e1d44cc8 --- /dev/null +++ b/docs/reference/adj.series.grad.herm.html @@ -0,0 +1,110 @@ + +Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.series.grad.herm(
    +  distance,
    +  scaling = 1,
    +  adj.order,
    +  adj.parm = NULL,
    +  adj.exp = FALSE
    +)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + + +
    adj.parm
    +

    vector of parameters (a_j)

    + + +
    adj.exp
    +

    boolean, defaults to FALSE

    + +
    +
    +

    Value

    +

    scalar or vector containing the gradient of the Hermite adjustment +series for every value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/adj.series.grad.poly.html b/docs/reference/adj.series.grad.poly.html new file mode 100644 index 00000000..d963dde9 --- /dev/null +++ b/docs/reference/adj.series.grad.poly.html @@ -0,0 +1,110 @@ + +Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For internal use only – not to be called by 'mrds' or 'Distance' users +directly.

    +
    + +
    +

    Usage

    +
    adj.series.grad.poly(
    +  distance,
    +  scaling = 1,
    +  adj.order,
    +  adj.parm = NULL,
    +  adj.exp = FALSE
    +)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector/scalar

    + + +
    scaling
    +

    scale parameter

    + + +
    adj.order
    +

    the adjustment order

    + + +
    adj.parm
    +

    vector of parameters (a_j)

    + + +
    adj.exp
    +

    boolean, defaults to FALSE

    + +
    +
    +

    Value

    +

    scalar or vector containing the gradient of the polynomial adjustment +series for every value in distance argument

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/apex.gamma.html b/docs/reference/apex.gamma.html new file mode 100644 index 00000000..a4b44844 --- /dev/null +++ b/docs/reference/apex.gamma.html @@ -0,0 +1,84 @@ + +Get the apex for a gamma detection function — apex.gamma • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Get the apex for a gamma detection function

    +
    + +
    +

    Usage

    +
    apex.gamma(ddfobj)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    ddf object

    + +
    +
    +

    Value

    +

    the distance at which the gamma peaks

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/assign.default.values.html b/docs/reference/assign.default.values.html new file mode 100644 index 00000000..db90adc7 --- /dev/null +++ b/docs/reference/assign.default.values.html @@ -0,0 +1,95 @@ + +Assign default values to list elements that have not been already assigned — assign.default.values • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Assigns default values for argument in list x from +argument=value pairs in ... if x$argument doesn't already +exist

    +
    + +
    +

    Usage

    +
    assign.default.values(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    generic list

    + + +
    ...
    +

    unspecified list of argument=value pairs that are used to +assign values

    + +
    +
    +

    Value

    +

    x - list with filled values

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/assign.par.html b/docs/reference/assign.par.html new file mode 100644 index 00000000..ebbbe44d --- /dev/null +++ b/docs/reference/assign.par.html @@ -0,0 +1,113 @@ + +Extraction and assignment of parameters to vector — assign.par • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Assigns parameters of a particular type (scale, shape, adjustments or g0 +(p(0))) from the vector of parameters in ddfobj. All of the +parameters are kept in a single vector for optimization even though they +have very different uses. assign.par parses them from the vector +based on a known structure and assigns them into ddfobj.

    +
    + +
    +

    Usage

    +
    assign.par(ddfobj, fpar)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    distance sampling object (see create.ddfobj)

    + + +
    fpar
    +

    parameter vector

    + +
    +
    +

    Value

    +

    if index==FALSE, vector of parameters that were requested or +index==TRUE, vector of 3 indices for scale, shape, adjustment

    +
    +
    +

    Details

    +

    getpar extracts the requested types from ddfobj.

    +
    +
    +

    Note

    +

    Internal functions not intended to be called by user.

    +
    +
    +

    See also

    +

    getpar

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/average.line.cond.html b/docs/reference/average.line.cond.html new file mode 100644 index 00000000..d3619a7b --- /dev/null +++ b/docs/reference/average.line.cond.html @@ -0,0 +1,109 @@ + +Average conditional detection function line for plotting — average.line.cond • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For models with covariates the detection probability for each observation +can vary. This function computes an average value for a set of distances to +plot an average line to graphically represent the fitted model in plots that +compare histograms and the scatter of individual estimated detection +probabilities.

    +
    + +
    +

    Usage

    +
    average.line.cond(finebr, obs, model)
    +
    + +
    +

    Arguments

    + + +
    finebr
    +

    set of fine breaks in distance over which detection function +values are averaged and plotted

    + + +
    obs
    +

    value of observer for averaging (1-2 individual observers)

    + + +
    model
    +

    ddf model object

    + +
    +
    +

    Value

    +

    list with 2 elements:

    xgridvector of gridded distance values
    valuesvector of average detection function values at + the xgrid values
    +
    +

    Note

    +

    Internal function called from plot functions for ddf objects

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/average.line.html b/docs/reference/average.line.html new file mode 100644 index 00000000..03a58255 --- /dev/null +++ b/docs/reference/average.line.html @@ -0,0 +1,113 @@ + +Average detection function line for plotting — average.line • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For models with covariates the detection probability for each observation +can vary. This function computes an average value for a set of distances to +plot an average line to graphically represent the fitted model in plots that +compare histograms and the scatter of individual estimated detection +probabilities. Averages are calculated over the observed covariate +combinations.

    +
    + +
    +

    Usage

    +
    average.line(finebr, obs, model)
    +
    + +
    +

    Arguments

    + + +
    finebr
    +

    set of fine breaks in distance over which detection function +values are averaged and plotted

    + + +
    obs
    +

    value of observer for averaging (1-2 individual observers; 3 +duplicates; 4 pooled observation team)

    + + +
    model
    +

    ddf model object

    + +
    +
    +

    Value

    +

    list with 2 elements

    xgridvector of gridded distance values
    valuesvector of average detection function values at + the xgrid values
    +
    +

    Note

    +

    Internal function called from plot functions for ddf objects

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/book.tee.data.html b/docs/reference/book.tee.data.html new file mode 100644 index 00000000..7d7a655d --- /dev/null +++ b/docs/reference/book.tee.data.html @@ -0,0 +1,135 @@ + +Golf tee data used in chapter 6 of Advanced Distance Sampling examples — book.tee.data • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Double platform data collected in a line transect survey of golf tees by 2 +observers at St. Andrews. Field sex was actually colour of the golf tee: 0 - +green; 1 - yellow. Exposure was either low (0) or high(1) depending on +height of tee above the ground. size was the number of tees in an observed +cluster.

    +
    + + +
    +

    Format

    +

    A list of 4 dataframes, with the list elements named: book.tee.dataframe, + book.tee.region, book.tee.samples and book.tee.obs.

    +

    book.tee.dataframe is the distance sampling data + dataframe. Used in the call to fit the detection function in ddf. + Contains the following columns:

    +

    object
    +

    numeric object id

    +
    observer
    +

    factor representing observer + 1 or 2

    +
    detected
    +

    numeric 1 if the animal was detected 0 otherwise

    + +
    distance
    +

    numeric value for the distance the animal was detected

    + +
    size
    +

    numeric value for the group size

    +
    sex
    +

    numeric value for + sex of animal

    +
    exposure
    +

    numeric value for exposure level 0 or 1

    + +

    book.tee.region: is the region table dataframe. Used to + supply the strata areas to the dht function. Contains the following + columns:

    +

    Region.Label
    +

    factor giving the strata labels

    + +
    Area
    +

    numeric value giving the strata areas

    + +

    book.tee.samples is the samples table dataframe to match + the transect ids to the region ids and supply the effort. Used in the + dht function. Contains the following columns:

    +

    Sample.Label
    +

    numeric giving the sample / transect labels

    + +
    Region.Label
    +

    factor giving the strata labels

    + +
    Effort
    +

    numeric value giving the sample / transect lengths

    + +

    book.tee.obs is the observations table dataframe to match + the object ids in the distance data to the transect labels. Used in the + dht function. Contains the following columns:

    +

    object
    +

    numeric value object id

    + +
    Region.Label
    +

    factor giving the strata labels

    + +
    Sample.Label
    +

    numeric giving the sample / transect labels

    + +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/calc.se.Np.html b/docs/reference/calc.se.Np.html new file mode 100644 index 00000000..22deadc1 --- /dev/null +++ b/docs/reference/calc.se.Np.html @@ -0,0 +1,92 @@ + +Find se of average p and N — calc.se.Np • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Find se of average p and N

    +
    + +
    +

    Usage

    +
    calc.se.Np(model, avgp, n, average.p)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    a ddf model object

    + + +
    avgp
    +

    average p function

    + + +
    n
    +

    sample size

    + + +
    average.p
    +

    the average probability of detection for the model

    + +
    +
    +

    Author

    +

    David L. Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/cdf.ds.html b/docs/reference/cdf.ds.html new file mode 100644 index 00000000..90c30f26 --- /dev/null +++ b/docs/reference/cdf.ds.html @@ -0,0 +1,114 @@ + +Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes cdf values of observed distances from fitted distribution. For a +set of observed x it returns the integral of f(x) for the range= (inner, x), +where inner is the innermost distance which is observable (either 0 or left +if left truncated). In terms of g(x) this is the integral of g(x) over +range divided by the integral of g(x) over the entire range of the data +(inner, W).

    +
    + +
    +

    Usage

    +
    cdf.ds(model, newdata = NULL)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    fitted distance sampling model

    + + +
    newdata
    +

    new data values if computed for values other than the +original observations

    + +
    +
    +

    Value

    +

    vector of cdf values for each observation

    +
    +
    +

    Note

    +

    This is an internal function that is not intended to be invoked +directly. It is called by qqplot.ddf to compute values for +Kolmogorov-Smirnov and Cramer-von Mises tests and the Q-Q plot.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/cds.html b/docs/reference/cds.html new file mode 100644 index 00000000..2d0ec643 --- /dev/null +++ b/docs/reference/cds.html @@ -0,0 +1,142 @@ + +CDS function definition — cds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates model formula list for conventional distance sampling using values +supplied in call to ddf

    +
    + +
    +

    Usage

    +
    cds(
    +  key = NULL,
    +  adj.series = NULL,
    +  adj.order = NULL,
    +  adj.scale = "width",
    +  adj.exp = FALSE,
    +  formula = ~1,
    +  shape.formula = ~1
    +)
    +
    + +
    +

    Arguments

    + + +
    key
    +

    string identifying key function (currently either "hn" +(half-normal),"hr" (hazard-rate), "unif" (uniform) or "gamma" (gamma +distribution)

    + + +
    adj.series
    +

    string identifying adjustment functions cos (Cosine), herm +(Hermite polynomials), poly (simple polynomials) or NULL

    + + +
    adj.order
    +

    vector of order of adjustment terms to include

    + + +
    adj.scale
    +

    whether to scale the adjustment terms by "width" or "scale"

    + + +
    adj.exp
    +

    if TRUE uses exp(adj) for adjustment to keep f(x)>0

    + + +
    formula
    +

    formula for scale function (included for completeness only +only formula=~1 for cds)

    + + +
    shape.formula
    +

    formula for shape function

    + +
    +
    +

    Value

    +

    A formula list used to define the detection function model

    +
    fct
    +

    string "cds"

    +
    key
    +

    key function string

    + +
    adj.series
    +

    adjustment function string

    +
    adj.order
    +

    adjustment + function orders

    +
    adj.scale
    +

    adjustment function scale type

    + +
    formula
    +

    formula for scale function

    +
    shape.formula
    +

    formula + for shape function

    + +
    +
    +

    Author

    +

    Jeff Laake; Dave Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/check.bounds.html b/docs/reference/check.bounds.html new file mode 100644 index 00000000..eabc22d5 --- /dev/null +++ b/docs/reference/check.bounds.html @@ -0,0 +1,111 @@ + +Check parameters bounds during optimisations — check.bounds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simple internal function to check that the optimisation didn't hit bounds. +Based on code that used to live in detfct.fit.opt.

    +
    + +
    +

    Usage

    +
    check.bounds(lt, lowerbounds, upperbounds, ddfobj, showit, setlower, setupper)
    +
    + +
    +

    Arguments

    + + +
    lt
    +

    optimisation object

    + + +
    lowerbounds
    +

    current lower bounds

    + + +
    upperbounds
    +

    current upper bounds

    + + +
    ddfobj
    +

    ddf object

    + + +
    showit
    +

    debug level

    + + +
    setlower
    +

    were lower bounds set by the user

    + + +
    setupper
    +

    were upper bounds set by the user

    + +
    +
    +

    Value

    +

    TRUE if parameters are close to the bound, else FALSE

    +
    +
    +

    Author

    +

    Dave Miller; Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/check.mono.html b/docs/reference/check.mono.html new file mode 100644 index 00000000..3a59349e --- /dev/null +++ b/docs/reference/check.mono.html @@ -0,0 +1,134 @@ + +Check that a detection function is monotone — check.mono • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Check that a fitted detection function is monotone non-increasing.

    +
    + +
    +

    Usage

    +
    check.mono(
    +  df,
    +  strict = TRUE,
    +  n.pts = 100,
    +  tolerance = 1e-08,
    +  plot = FALSE,
    +  max.plots = 6
    +)
    +
    + +
    +

    Arguments

    + + +
    df
    +

    a fitted detection function object

    + + +
    strict
    +

    if TRUE (default) the detection function must be +"strictly" monotone, that is that (g(x[i])<=g(x[i-1])) over the whole +range (left to right truncation points).

    + + +
    n.pts
    +

    number of equally-spaced points between left and right +truncation at which to evaluate the detection function (default 100)

    + + +
    tolerance
    +

    numerical tolerance for monotonicity checks (default 1e-8)

    + + +
    plot
    +

    plot a diagnostic highlighting the non-monotonic areas (default +FALSE)

    + + +
    max.plots
    +

    when plot=TRUE, what is the maximum number of plots +of non-monotone covariate combinations that should be plotted? Plotted +combinations are a random sample of the non-monotonic subset of evaluations. +No effect for non-covariate models.

    + +
    +
    +

    Value

    +

    TRUE if the detection function is monotone, FALSE if +it's not. warnings are issued to warn the user that the function is +non-monotonic.

    +
    +
    +

    Details

    +

    Evaluates a series of points over the range of the detection function (left +to right truncation) then determines:

    +

    1. If the detection function is always less than or equal to its value at +the left truncation (g(x)<=g(left), or usually g(x)<=g(0)). +2. (Optionally) The detection function is always monotone decreasing +(g(x[i])<=g(x[i-1])). This check is only performed when +strict=TRUE (the default). +3. The detection function is never less than 0 (g(x)>=0). +4. The detection function is never greater than 1 (g(x)<=1).

    +

    For models with covariates in the scale parameter of the detection function is evaluated at all observed covariate combinations.

    +

    Currently covariates in the shape parameter are not supported.

    +
    +
    +

    Author

    +

    David L. Miller, Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/coef.ds.html b/docs/reference/coef.ds.html new file mode 100644 index 00000000..dcfc5a7a --- /dev/null +++ b/docs/reference/coef.ds.html @@ -0,0 +1,122 @@ + +Extract coefficients — coef.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Extract coefficients and provide a summary of parameters and estimates +from the output of ddf model objects.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ds'
    +coef(object,...)
    +       # S3 method for class 'io'
    +coef(object,...)
    +       # S3 method for class 'io.fi'
    +coef(object,...)
    +       # S3 method for class 'trial'
    +coef(object,...)
    +       # S3 method for class 'trial.fi'
    +coef(object,...)
    +       # S3 method for class 'rem'
    +coef(object,...)
    +       # S3 method for class 'rem.fi'
    +coef(object,...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    ddf model object of class ds, io, io.fi, +trial, trial.fi, rem, or rem.fi.

    + + +
    ...
    +

    unspecified arguments that are unused at present

    + +
    +
    +

    Value

    +

    For coef.ds List of data frames for coefficients (scale and exponent + (if hazard))

    +
    scale
    +

    dataframe of scale coefficient estimates and + standard errors

    +
    exponent
    +

    dataframe with exponent estimate and + standard error if hazard detection function

    + + +

    For all others Data frame containing each coefficient and standard error

    +
    +
    +

    Note

    +

    These functions are called by the generic function coef for any + ddf model object. It can be called directly by the user, but it is + typically safest to use coef which calls the appropriate function + based on the type of model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/compute.Nht.html b/docs/reference/compute.Nht.html new file mode 100644 index 00000000..37c768ce --- /dev/null +++ b/docs/reference/compute.Nht.html @@ -0,0 +1,102 @@ + +Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Compute individual components of Horvitz-Thompson abundance estimate in +covered region for a particular subset of the data depending on value of +group = TRUE (do group abundance); FALSE(do individual abundance)

    +
    + +
    +

    Usage

    +
    compute.Nht(pdot, group = TRUE, size = NULL)
    +
    + +
    +

    Arguments

    + + +
    pdot
    +

    vector of estimated detection probabilities

    + + +
    group
    +

    if TRUE (do group abundance); FALSE(do individual abundance)

    + + +
    size
    +

    vector of group size values for clustered populations

    + +
    +
    +

    Value

    +

    vector of H-T components for abundance estimate

    +
    +
    +

    Note

    +

    Internal function called by covered.region.dht

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/covered.region.dht.html b/docs/reference/covered.region.dht.html new file mode 100644 index 00000000..1b03f68d --- /dev/null +++ b/docs/reference/covered.region.dht.html @@ -0,0 +1,97 @@ + +Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes H-T abundance within covered region by sample.

    +
    + +
    +

    Usage

    +
    covered.region.dht(obs, samples, group)
    +
    + +
    +

    Arguments

    + + +
    obs
    +

    observations table

    + + +
    samples
    +

    samples table

    + + +
    group
    +

    if TRUE compute abundance of group otherwise abundance of +individuals

    + +
    +
    +

    Value

    +

    Nhat.by.sample - dataframe of abundance by sample

    +
    +
    +

    Note

    +

    Internal function called by dht and related functions

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create.bins.html b/docs/reference/create.bins.html new file mode 100644 index 00000000..d552bd5f --- /dev/null +++ b/docs/reference/create.bins.html @@ -0,0 +1,89 @@ + +Create bins from a set of binned distances and a set of cutpoints. — create.bins • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This is an internal routine and shouldn't be necessary in normal analyses.

    +
    + +
    +

    Usage

    +
    create.bins(data, cutpoints)
    +
    + +
    +

    Arguments

    + + +
    data
    +

    `data.frame` with at least the column `distance`.

    + + +
    cutpoints
    +

    vector of cutpoints for the bins

    + +
    +
    +

    Value

    +

    argument `data` with two extra columns `distbegin` and + `distend`.

    +
    +
    +

    Author

    +

    David L. Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create.command.file.html b/docs/reference/create.command.file.html new file mode 100644 index 00000000..e2f2075a --- /dev/null +++ b/docs/reference/create.command.file.html @@ -0,0 +1,96 @@ + +create.command.file — create.command.file • mrds + Skip to contents + + +
    +
    +
    + +
    +

    create.command.file

    +
    + +
    +

    Usage

    +
    create.command.file(dsmodel = call(), data, method, meta.data, control)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    distance sampling model specification

    + + +
    data
    +

    dataframe containing data to be analyzed

    + + +
    method
    +

    analysis method

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + +
    +
    +

    Author

    +

    Jonah McArthur

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create.ddfobj.html b/docs/reference/create.ddfobj.html new file mode 100644 index 00000000..1dd20ec3 --- /dev/null +++ b/docs/reference/create.ddfobj.html @@ -0,0 +1,138 @@ + +Create detection function object — create.ddfobj • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates and populates a specific list structure to define a detection +function object and its data. The ddfobj is used throughout the +package as a calling argument to various functions.

    +
    + +
    +

    Usage

    +
    create.ddfobj(model, xmat, meta.data, initial)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    model list with key function and possibly adjustment functions, +scale formula, and shape formula

    + + +
    xmat
    +

    model data frame

    + + +
    meta.data
    +

    list of options describing data like width, etc

    + + +
    initial
    +

    named list of initial values for parameters of the detection +function (should have at least "scale", maybe also have +"shape" and "adjustments")

    + +
    +
    +

    Value

    +

    Distance sampling function object list with elements that all can be + null except type:

    +
    type
    +

    type of detection function + hn, hr, gamma, unif, logistic

    +
    xmat
    +

    model data frame

    + +
    intercept.only
    +

    TRUE if scale = ~1 and any shape formula =~1

    + +
    scale
    +

    sublist with elements (can be NULL i.e., unif key):formula, + parameters, design matrix (dm)

    +
    shape
    +

    sublist with elements (power + of hazard rate or gamma) (can be NULL i.e., unif or hn key):formula, + parameters, design matrix (dm)

    +
    adjustment
    +

    sublist with elements + (is NULL if no adjustments used):series,order,scale,parameters

    + +
    g0
    +

    sublist with elements (not used at present):formula,parameters, + design matrix(dm), link

    + +
    +
    +

    Note

    +

    Internal function not meant to be called by user

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create.model.frame.html b/docs/reference/create.model.frame.html new file mode 100644 index 00000000..c6ba1ff7 --- /dev/null +++ b/docs/reference/create.model.frame.html @@ -0,0 +1,117 @@ + +Create a model frame for ddf fitting — create.model.frame • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates a model.frame for distance detection function fitting. It includes +some pre-specified and computed variables with those included in the model +specified by user (formula)

    +
    + +
    +

    Usage

    +
    create.model.frame(xmat, scale.formula, meta.data, shape.formula = NULL)
    +
    + +
    +

    Arguments

    + + +
    xmat
    +

    dataframe for ddf

    + + +
    scale.formula
    +

    user specified formula for scale of distance detection +function

    + + +
    meta.data
    +

    user-specified meta.data (see ddf

    + + +
    shape.formula
    +

    user specified formula for shape parameter of distance +detection function

    + +
    +
    +

    Value

    +

    model frame for analysis

    +
    +
    +

    Details

    +

    The following fields are always included: detected, observer, binned, and +optionally distance (unless null), timesdetected (if present in data). If +the distance data were binned, include distbegin and distend point fields. +If the integration width varies also include int.begin and int.end and +include an offset field for an iterative glm, if used. Beyond these fields +only fields used in the model formula are included.

    +
    +
    +

    Note

    +

    Internal function and not called by user

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/create.varstructure.html b/docs/reference/create.varstructure.html new file mode 100644 index 00000000..13deb140 --- /dev/null +++ b/docs/reference/create.varstructure.html @@ -0,0 +1,133 @@ + +Creates structures needed to compute abundance and variance — create.varstructure • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates samples and obs dataframes used to compute abundance and its +variance based on a structure of geographic regions and samples within each +region. The intent is to generalize this routine to work with other +sampling structures.

    +
    + +
    +

    Usage

    +
    create.varstructure(model, region, sample, obs, dht.se)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    fitted ddf object

    + + +
    region
    +

    region table

    + + +
    sample
    +

    sample table

    + + +
    obs
    +

    table of object #'s and links to sample and region table

    + + +
    dht.se
    +

    is uncertainty going to be calculated later?

    + +
    +
    +

    Value

    +

    List with 2 elements:

    +
    samples
    +

    merged dataframe containing + region and sample info - one record per sample

    +
    obs
    +

    merged + observation data and links to region and samples

    + +
    +
    +

    Details

    +

    The function performs the following tasks: 1)tests to make sure that region +labels are unique, 2) merges sample and region tables into a samples table +and issue a warning if not all samples were used, 3) if some regions have no +samples or if some values of Area were not valid areas given then issue +error and stop, then an error is given and the code stops, 4) creates a +unique region/sample label in samples and in obs, 5) merges observations +with sample and issues a warning if not all observations were used, 6) sorts +regions by its label and merges the values with the predictions from the +fitted model based on the object number and limits it to the data that is +appropriate for the fitted detection function.

    +
    +
    +

    Note

    +

    Internal function called by dht

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.ds-1.png b/docs/reference/ddf.ds-1.png new file mode 100644 index 00000000..e472dab4 Binary files /dev/null and b/docs/reference/ddf.ds-1.png differ diff --git a/docs/reference/ddf.ds-2.png b/docs/reference/ddf.ds-2.png new file mode 100644 index 00000000..ce5d42f1 Binary files /dev/null and b/docs/reference/ddf.ds-2.png differ diff --git a/docs/reference/ddf.ds.html b/docs/reference/ddf.ds.html new file mode 100644 index 00000000..cc3fe7d8 --- /dev/null +++ b/docs/reference/ddf.ds.html @@ -0,0 +1,279 @@ + +CDS/MCDS Distance Detection Function Fitting — ddf.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Fits a conventional distance sampling (CDS) (likelihood eq 6.6 in Laake and +Borchers 2004) or multi-covariate distance sampling (MCDS)(likelihood eq +6.14 in Laake and Borchers 2004) model for the detection function of +observed distance data. It only uses key functions and does not incorporate +adjustment functions as in CDS/MCDS analysis engines in DISTANCE (Marques +and Buckland 2004). Distance can be grouped (binned), ungrouped (unbinned) +or mixture of the two. This function is not called directly by the user and +is called from ddf,ddf.io, or ddf.trial.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ds'
    +ddf(
    +  dsmodel,
    +  mrmodel = NULL,
    +  data,
    +  method = "ds",
    +  meta.data = list(),
    +  control = list(),
    +  call
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    model list with key function and scale formula if any

    + + +
    mrmodel
    +

    not used

    + + +
    data
    +

    data.frame; see ddf for details

    + + +
    method
    +

    analysis method; only needed if this function called from +ddf.io or ddf.trial

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call if this function not called directly from +ddf (e.g., called via ddf.io)

    + +
    +
    +

    Value

    +

    result: a ds model object

    +
    +
    +

    Details

    +

    For a complete description of each of the calling arguments, see +ddf. The argument model in this function is the same +as dsmodel in ddf. The argument dataname is the name +of the dataframe specified by the argument data in ddf. The +arguments control,meta.data,and method are defined the +same as in ddf.

    +
    +
    +

    Note

    +

    If mixture of binned and unbinned distance, width must be set to be >= + largest interval endpoint; this could be changed with a more complicated + analysis; likewise, if all binned and bins overlap, the above must also + hold; if bins don't overlap, width must be one of the interval endpoints; + same holds for left truncation Although the mixture analysis works in + principle it has not been tested via simulation.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +

    Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for the detection + function. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    +

    Examples

    +
    
    +# ddf.ds is called when ddf is called with method="ds"
    +# \donttest{
    +data(book.tee.data)
    +region <- book.tee.data$book.tee.region
    +egdata <- book.tee.data$book.tee.dataframe
    +samples <- book.tee.data$book.tee.samples
    +obs <- book.tee.data$book.tee.obs
    +result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1),
    +              data = egdata[egdata$observer==1, ], method = "ds",
    +              meta.data = list(width = 4))
    +summary(result,se=TRUE)
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  124 
    +#> Distance range         :  0  -  4 
    +#> AIC                    :  311.1385 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>              estimate         se
    +#> (Intercept) 0.6632435 0.09981249
    +#> 
    +#>                        Estimate          SE         CV
    +#> Average p             0.5842744  0.04637627 0.07937412
    +#> N in covered region 212.2290462 20.85130344 0.09824906
    +plot(result,main="cds - observer 1")
    +
    +print(dht(result,region,samples,obs,options=list(varflag=0,group=TRUE),
    +          se=TRUE))
    +#> Abundance and density estimates from distance sampling
    +#> Variance       : R2, binomial 
    +#> 
    +#> Summary statistics
    +#> 
    +#>   Region Area CoveredArea Effort   n  k        ER      se.ER      cv.ER
    +#> 1      1 1040        1040    130  72  6 0.5538462 0.02926903 0.05284685
    +#> 2      2  640         640     80  52  5 0.6500000 0.08292740 0.12758061
    +#> 3  Total 1680        1680    210 124 11 0.5904762 0.03641856 0.06167659
    +#> 
    +#> Summary for clusters
    +#> 
    +#> Abundance:
    +#>   Region  Estimate       se         cv       lcl      ucl df
    +#> 1      1 123.22977 13.54083 0.10988275  99.41771 152.7452  0
    +#> 2      2  88.99928 10.64090 0.11956159  70.46547 112.4078  0
    +#> 3  Total 212.22905 20.85130 0.09824906 175.13617 257.1780  0
    +#> 
    +#> Density:
    +#>   Region  Estimate         se         cv        lcl       ucl df
    +#> 1      1 0.1184902 0.01302002 0.10988275 0.09559396 0.1468704  0
    +#> 2      2 0.1390614 0.01662640 0.11956159 0.11010230 0.1756372  0
    +#> 3  Total 0.1263268 0.01241149 0.09824906 0.10424772 0.1530821  0
    +#> 
    +#> Summary for individuals
    +#> 
    +#> Abundance:
    +#>   Region Estimate       se        cv      lcl      ucl df
    +#> 1      1 391.9391 46.10793 0.1176405 311.4775 493.1858  0
    +#> 2      2 260.1517 33.65581 0.1293699 202.0987 334.8806  0
    +#> 3  Total 652.0909 67.40510 0.1033677 532.7888 798.1070  0
    +#> 
    +#> Density:
    +#>   Region  Estimate         se        cv       lcl       ucl df
    +#> 1      1 0.3768645 0.04433455 0.1176405 0.2994976 0.4742171  0
    +#> 2      2 0.4064871 0.05258720 0.1293699 0.3157792 0.5232509  0
    +#> 3  Total 0.3881493 0.04012208 0.1033677 0.3171362 0.4750637  0
    +#> 
    +#> Expected cluster size
    +#>   Region Expected.S se.Expected.S cv.Expected.S
    +#> 1      1   3.180556    0.13362415    0.04201283
    +#> 2      2   2.923077    0.14443673    0.04941257
    +#> 3  Total   3.072581    0.09870565    0.03212467
    +print(ddf.gof(result))
    +
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#>           [0,0.364] (0.364,0.727] (0.727,1.09] (1.09,1.45] (1.45,1.82]
    +#> Observed     25.000        13.000       12.000      22.000      12.000
    +#> Expected     19.181        18.522       17.270      15.549      13.518
    +#> Chisquare     1.765         1.646        1.608       2.677       0.170
    +#>           (1.82,2.18] (2.18,2.55] (2.55,2.91] (2.91,3.27] (3.27,3.64] (3.64,4]
    +#> Observed        8.000      12.000       7.000       8.000       4.000    1.000
    +#> Expected       11.348       9.199       7.200       5.442       3.972    2.799
    +#> Chisquare       0.988       0.853       0.006       1.202       0.000    1.156
    +#>             Total
    +#> Observed  124.000
    +#> Expected  124.000
    +#> Chisquare  12.071
    +#> 
    +#> P = 0.20932 with 9 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.0655753 p-value = 0.77897
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.gof.html b/docs/reference/ddf.gof.html new file mode 100644 index 00000000..c66493b4 --- /dev/null +++ b/docs/reference/ddf.gof.html @@ -0,0 +1,170 @@ + +Goodness of fit tests for distance sampling models — ddf.gof • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Generic function that computes chi-square goodness of fit test for detection +function models with binned data and Cramer-von Mises and Kolmogorov-Smirnov +(if ks=TRUE)tests for exact distance data. By default a Q-Q plot is +generated for exact data (and can be suppressed using the qq=FALSE +argument).

    +
    + +
    +

    Usage

    +
    ddf.gof(
    +  model,
    +  breaks = NULL,
    +  nc = NULL,
    +  qq = TRUE,
    +  nboot = 100,
    +  ks = FALSE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    model object

    + + +
    breaks
    +

    Cutpoints to use for binning data

    + + +
    nc
    +

    Number of distance classes

    + + +
    qq
    +

    Flag to indicate whether quantile-quantile plot is desired

    + + +
    nboot
    +

    number of replicates to use to calculate p-values for the +Kolmogorov-Smirnov goodness of fit test statistics

    + + +
    ks
    +

    perform the Kolmogorov-Smirnov test (this involves many bootstraps +so can take a while)

    + + +
    ...
    +

    Graphics parameters to pass into qqplot function

    + +
    +
    +

    Value

    +

    List of class ddf.gof containing

    +
    chi-square
    +

    Goodness +of fit test statistic

    +
    df
    +

    Degrees of freedom associated with test +statistic

    +
    p-value
    +

    Significance level of test statistic

    + +
    +
    +

    Details

    +

    Formal goodness of fit testing for detection function models using +Kolmogorov-Smirnov and Cramer-von Mises tests. Both tests are based on +looking at the quantile-quantile plot produced by qqplot.ddf +and deviations from the line x=y.

    +

    The Kolmogorov-Smirnov test asks the question "what's the largest vertical +distance between a point and the y=x line?" It uses this distance as a +statistic to test the null hypothesis that the samples (EDF and CDF in our +case) are from the same distribution (and hence our model fits well). If the +deviation between the y=x line and the points is too large we reject the +null hypothesis and say the model doesn't have a good fit.

    +

    Rather than looking at the single biggest difference between the y=x line +and the points in the Q-Q plot, we might prefer to think about all the +differences between line and points, since there may be many smaller +differences that we want to take into account rather than looking for one +large deviation. Its null hypothesis is the same, but the statistic it uses +is the sum of the deviations from each of the point to the line. +Note that a bootstrap procedure is required for the Kolmogorov-Smirnov test +to ensure that the p-values from the procedure are correct as the we are +comparing the cumulative distribution function (CDF) and empirical +distribution function (EDF) and we have estimated the parameters of the +detection function. The nboot parameter controls the number of +bootstraps to use. Set to 0 to avoid computing bootstraps (much +faster but with no Kolmogorov-Smirnov results, of course).

    +

    One can change the precision of printed values by using the print.ddf.gof method's digits argument.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.html b/docs/reference/ddf.html new file mode 100644 index 00000000..4d9600ac --- /dev/null +++ b/docs/reference/ddf.html @@ -0,0 +1,457 @@ + +Distance Detection Function Fitting — ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Generic function for fitting detection functions for distance sampling with +single and double observer configurations. Independent observer, trial and +dependent observer (removal) configurations are included. This is a generic +function which does little other than to validate the calling arguments and +methods and then calls the appropriate method specific function to do +the analysis.

    +
    + +
    +

    Usage

    +
    ddf(
    +  dsmodel = call(),
    +  mrmodel = call(),
    +  data,
    +  method = "ds",
    +  meta.data = list(),
    +  control = list(),
    +  call = NULL
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    distance sampling model specification

    + + +
    mrmodel
    +

    mark-recapture model specification

    + + +
    data
    +

    dataframe containing data to be analyzed

    + + +
    method
    +

    analysis method

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    not implemented for top level ddf function, this is set by ddf as it is passed to the other ddf generics.

    + +
    +
    +

    Value

    +

    model object of class=(method, "ddf")

    +
    +
    +

    Details

    +

    The fitting code has certain expectations about data. It should be a +dataframe with at least the following fields named and defined as follows:

    objectobject number
    observerobserver number (1 or 2) for double + observer; only 1 if single observer
    detected1 if detected by the observer and 0 if + missed; always 1 for single observer
    distanceperpendicular distance

    If the data are for clustered objects, the dataframe should also contain a +field named size that gives the observed number in the cluster. If +the data are for a double observer survey, then there are two records for +each observation and each should have the same object number. The code +assumes the observations are listed in the same order for each observer such +that if the data are subsetted by observer there will be the same +number of records in each and each subset will be in the same object +order. In addition to these predefined and pre-named fields, the dataframe +can have any number and type of fields that are used as covariates in the +dsmodel and mrmodel. At present, discrepancies between +observations in distance, size and any user-specified +covariates cannot be assimilated into the uncertainty of the estimate. The +code presumes the values for those fields are the same for both records +(observer=1 and observer=2) and it uses the value from observer 1. Thus it +makes sense to make the values the same for both records in each pair even +when both detect the object or when observer 1 doesn't detect the object the +data would have to be taken from observer 2 and would not be consistent.

    +

    Five different fitting methods are currently available and these in turn +define whether dsmodel and mrmodel need to be defined.

    +
    MethodSingle/Doubledsmodelmrmodel
    dsSingleyesno
    ioDoubleyesyes
    io.fiDoublenoyes
    trialDoubleyesyes
    trial.fiDoublenoyes
    remDoubleyesyes
    rem.fiDoublenoyes

    Methods with the suffix ".fi" use the assumption of full independence +and do not use the distance sampling portion of the likelihood which is why a +dsmodel is not needed. An mrmodel is only needed for double +observer surveys and thus is not needed for method ds.

    +

    The dsmodel specifies the detection function g(y) for the distance +sampling data and the models restrict g(0)=1. For single observer data g(y) +is the detection function for the single observer and if it is a double +observer survey it is the relative detection function (assuming g(0)=1) of +both observers as a team (the unique observations from both observers). In +double observer surveys, the detection function is p(y)=p(0)g(y) such that +p(0)<1. The detection function g(y) is specified by dsmodel and p(0) +estimated from the conditional detection functions (see mrmodel +below). The value of dsmodel is specified using a hybrid +formula/function notation. The model definition is prefixed with a ~ +and the remainder is a function definition with specified arguments. At +present there are two different functions, cds and +mcds, for conventional distance sampling and multi-covariate +distance sampling. Both functions have the same required arguments +(key,formula). The first specifies the key function this +can be half-normal ("hn"), hazard-rate ("hr"), gamma ("gamma") or uniform +("unif"). The argument formula specifies the formula +for the log of the scale parameter of the key function (e.g., the equivalent +of the standard deviation in the half-normal). The variable distance +should not be included in the formula because the scale is for distance. +See Marques, F.F.C. and S.T. Buckland (2004) for more details on the +representation of the scale formula. For the hazard rate and gamma +functions, an additional shape.formula can be specified for the model +of the shape parameter. The default will be ~1. +Adjustment terms can be specified by setting adj.series which can have +the values: "none", "cos" (cosine), "poly" (polynomials), and "herm" +(Hermite polynomials). One must also specify a vector of orders for the +adjustment terms (adj.order) and a scaling (adj.scale) which +may be "width" or "scale" (for scaling by the scale parameter). Note that +the uniform key can only be used with adjustments (usually cosine adjustments +for a Fourier-type analysis).

    +

    The mrmodel specifies the form of the conditional detection functions +(i.e.,probability it is seen by observer j given it was seen by observer +3-j) for each observer (j=1,2) in a double observer survey. The value is +specified using the same mix of formula/function notation but in this case +the functions are glm and gam. The arguments for the +functions are formula and link. At present, only glm +is allowed and it is restricted to link=logit. Thus, currently the +only form for the conditional detection functions is logistic as expressed +in eq 6.32 of Laake and Borchers (2004). In contrast to dsmodel, the +argument formula will typically include distance and all other +covariates that affect detection probability. For example, +mrmodel=~glm(formula=~distance+size+sex) constructs a conditional +detection function based on the logistic form with additive factors, +distance, size, and sex. As another example, +mrmodel=~glm(formula=~distance*size+sex) constructs the same model +with an added interaction between distance and size.

    +

    The argument meta.data is a list that enables various options about +the data to be set. These options include:

    +
    point
    +

    if TRUE the data are from point counts and + FALSE (default) implies line transect data

    + +
    width
    +

    distance specifying half-width of the transect

    + +
    left
    +

    distance specifying inner truncation value

    + +
    binned
    +

    TRUE or FALSE to specify whether + distances should be binned for analysis

    + +
    breaks
    +

    if binned=TRUE, this is a required sequence of + break points that are used for plotting/gof. They should match + distbegin, distend values if bins are fixed

    + +
    int.range
    +

    an integration range for detection probability; + either a vector of 2 or matrix with 2 columns

    + +
    mono
    +

    constrain the detection function to be weakly + monotonically decreasing (only applicable when there are no covariates in + the detection function)

    + +
    mono.strict
    +

    when TRUE constrain the detection function + to be strictly monotonically decreasing (again, only applicable when there + are no covariates in the detection function)

    + + +

    Using meta.data=list(int.range=c(1,10)) is the same as +meta.data=list(left=1,width=10). If +meta.data=list(binned=TRUE) is used, the dataframe needs to contain +the fields distbegin and distend for each observation which specify the left +and right hand end points of the distance interval containing the +observation. This is a general data structure that allows the intervals to +change rather than being fixed as in the standard distance analysis tools. +Typically, if the intervals are changing so is the integration range. For +example, assume that distance bins are generated using fixed angular +measurements from an aircraft in which the altitude is varying. Because all +analyses are truncated (i.e., the last interval does not go to infinity), +the transect width (and the left truncation point if there is a blindspot +below the aircraft) can potentially change for each observation. The +argument int.range can also be entered as a matrix with 2 columns +(left and width) and a row for each observation.

    +

    The argument control is a list that enables various analysis options +to be set. It is not necessary to set any of these for most analyses. They +were provided so the user can optionally see intermediate fitting output and +to control fitting if the algorithm doesn't converge which happens +infrequently. The list values include:

    +
    showit
    +

    Integer (0-3, default 0) controls the + (increasing)amount of information printed during fitting. 0 - none, >=1 - + information about refitting and bound changes is printed, >=2 - + information about adjustment term fitting is printed, ==3 -per-iteration + parameter estimates and log-likelihood printed.

    + +
    estimate
    +

    if FALSE fits model but doesn't estimate predicted + probabilities

    + +
    refit
    +

    if TRUE the algorithm will attempt multiple + optimizations at different starting values if it doesn't converge

    + +
    nrefits
    +

    number of refitting attempts

    + +
    initial
    +

    a named list of starting values for the dsmodel + parameters (e.g. $scale, $shape, $adjustment)

    + +
    lowerbounds
    +

    a vector of lowerbounds for the dsmodel + parameters in the order the ds parameters will appear in the par + element of the ddf object, i.e. fit.ddf$par where fit.ddf + is a fitted ddf model.

    + +
    upperbounds
    +

    a vector of upperbounds for the dsmodel + parameters in the order the ds parameters will appear in the par + element of the ddf object, i.e. fit.ddf$par where fit.ddf + is a fitted ddf model.

    + +
    limit
    +

    if TRUE restrict analysis to observations with + detected=1

    + +
    debug
    +

    if TRUE, if fitting fails, return an object with + fitting information

    + +
    nofit
    +

    if TRUE don't fit a model, but use the starting values + and generate an object based on those values

    + +
    optimx.method
    +

    one (or a vector of) string(s) giving the + optimisation method to use. If more than one is supplied, the results from + one are used as the starting values for the next. See + optimx

    + +
    optimx.maxit
    +

    maximum number of iterations to use in the + optimisation.

    + +
    mono.random.start
    +

    By default when monotonicity constraints + are enforced, a grid of starting values are tested. Instead random + starting values can be used (uniformly distributed between the upper and + lower bounds). Set TRUE for random start, FALSE (default) + uses the grid method

    + +
    mono.method
    +

    The optimiser method to be used when (strict) + monotonicity is enforced. Can be either slsqp or solnp. + Default slsqp.

    + +
    mono.startvals
    +

    Controls if the mono.optimiser should find + better starting values by first fitting a key function without adjustments, + and then use those start values for the key function parameters when + fitting the key + adjustment series detection function. Defaults to + FALSE

    + +
    mono.outer.iter
    +

    Number of outer iterations to be used by + solnp when fitting a monotonic model and solnp is selected. + Default 200.

    + +
    silent
    +

    silences warnings within ds fitting method (helpful + for running many times without generating many warning/error messages).

    + +
    optimizer
    +

    By default this is set to 'both' for single + observer analyses and 'R' for double observer analyses. For single + observer analyses where optimizer = 'both', the R optimizer will be used + and if present the MCDS optimizer will also be used. The result with the + best likelihood value will be selected. To run only a specified optimizer + set this value to either 'R' or 'MCDS'. The MCDS optimizer cannot currently + be used for detection function fitting with double observer analyses. + See mcds_dot_exe for more information.

    + +
    winebin
    +

    Location of the wine binary used to run + MCDS.exe. See mcds_dot_exe for more information.

    + + +

    Examples of distance sampling analyses are available at +https://examples.distancesampling.org/.

    +

    Hints and tips on fitting (particularly optimisation issues) are on the +mrds_opt manual page.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +

    Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for the detection + function. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    + +
    +

    Author

    +

    Jeff Laake

    +
    + +
    +

    Examples

    +
    # load data
    +data(book.tee.data)
    +region <- book.tee.data$book.tee.region
    +egdata <- book.tee.data$book.tee.dataframe
    +samples <- book.tee.data$book.tee.samples
    +obs <- book.tee.data$book.tee.obs
    +
    +# fit a half-normal detection function
    +result <- ddf(dsmodel=~mcds(key="hn", formula=~1), data=egdata, method="ds",
    +              meta.data=list(width=4))
    +
    +# fit an independent observer model with full independence
    +result.io.fi <- ddf(mrmodel=~glm(~distance), data=egdata, method="io.fi",
    +                    meta.data=list(width = 4))
    +
    +# fit an independent observer model with point independence
    +result.io <- ddf(dsmodel=~cds(key = "hn"), mrmodel=~glm(~distance),
    +                 data=egdata, method="io", meta.data=list(width=4))
    +if (FALSE) { # \dontrun{
    +
    +# simulated single observer point count data (see ?ptdata.single)
    +data(ptdata.single)
    +ptdata.single$distbegin <- (as.numeric(cut(ptdata.single$distance,
    +                            10*(0:10)))-1)*10
    +ptdata.single$distend <- (as.numeric(cut(ptdata.single$distance,
    +                          10*(0:10))))*10
    +model <- ddf(data=ptdata.single, dsmodel=~cds(key="hn"),
    +             meta.data=list(point=TRUE,binned=TRUE,breaks=10*(0:10)))
    +
    +summary(model)
    +
    +plot(model,main="Single observer binned point data - half normal")
    +
    +model <- ddf(data=ptdata.single, dsmodel=~cds(key="hr"),
    +             meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
    +
    +summary(model)
    +
    +plot(model, main="Single observer binned point data - hazard rate")
    +
    +dev.new()
    +
    +# simulated double observer point count data (see ?ptdata.dual)
    +# setup data
    +data(ptdata.dual)
    +ptdata.dual$distbegin <- (as.numeric(cut(ptdata.dual$distance,
    +                          10*(0:10)))-1)*10
    +ptdata.dual$distend <- (as.numeric(cut(ptdata.dual$distance,
    +                        10*(0:10))))*10
    +
    +model <- ddf(method="io", data=ptdata.dual, dsmodel=~cds(key="hn"),
    +             mrmodel=~glm(formula=~distance*observer),
    +             meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
    +
    +summary(model)
    +
    +plot(model, main="Dual observer binned point data", new=FALSE, pages=1)
    +
    +model <- ddf(method="io", data=ptdata.dual,
    +             dsmodel=~cds(key="unif", adj.series="cos", adj.order=1),
    +             mrmodel=~glm(formula=~distance*observer),
    +             meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
    +
    +summary(model)
    +
    +par(mfrow=c(2,3))
    +plot(model,main="Dual observer binned point data",new=FALSE)
    +
    +} # }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.io.fi.html b/docs/reference/ddf.io.fi.html new file mode 100644 index 00000000..4aabf897 --- /dev/null +++ b/docs/reference/ddf.io.fi.html @@ -0,0 +1,158 @@ + +Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Analysis of Independent Observer Configuration with Full +Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io.fi'
    +ddf(
    +  dsmodel = NULL,
    +  mrmodel,
    +  data,
    +  method,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    not used

    + + +
    mrmodel
    +

    mark-recapture model specification

    + + +
    data
    +

    analysis dataframe

    + + +
    method
    +

    analysis method; only needed if this function called from +ddf.io

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: an io.fi model object

    +
    +
    +

    Details

    +

    The mark-recapture data derived from an independent observer distance +sampling survey can be used to derive conditional detection functions +(p_j(y)) for both observers (j=1,2). They are conditional detection +functions because detection probability for observer j is based on seeing or +not seeing observations made by observer 3-j. Thus, p_1(y) is estimated by +p_1|2(y).

    +

    If detections by the observers are independent (full +independence) then p_1(y)=p_1|2(y),p_2(y)=p_2|1(y) and for the union, full +independence means that p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) for each +distance y. In fitting the detection functions the likelihood given by eq +6.8 and 6.16 in Laake and Borchers (2004) is used. That analysis does not +require the usual distance sampling assumption that perpendicular distances +are uniformly distributed based on line placement that is random relative to +animal distribution. However, that assumption is used in computing +predicted detection probability which is averaged based on a uniform +distribution (see eq 6.11 of Laake and Borchers 2004).

    +

    For a complete description of each of the calling arguments, see +ddf. The argument model in this function is the same +as mrmodel in ddf. The argument dataname is the name +of the dataframe specified by the argument data in ddf. The +arguments control,meta.data,and method are defined the +same as in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    + +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.io.html b/docs/reference/ddf.io.html new file mode 100644 index 00000000..27ed08ff --- /dev/null +++ b/docs/reference/ddf.io.html @@ -0,0 +1,159 @@ + +Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Distance Sampling (MRDS) Analysis of Independent Observer +Configuration and Point Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io'
    +ddf(
    +  dsmodel,
    +  mrmodel,
    +  data,
    +  method = NULL,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    distance sampling model specification; model list with key +function and scale formula if any

    + + +
    mrmodel
    +

    mark-recapture model specification; model list with formula +and link

    + + +
    data
    +

    analysis dataframe

    + + +
    method
    +

    not used

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: an io model object which is composed of io.fi and ds model + objects

    +
    +
    +

    Details

    +

    MRDS analysis based on point independence involves two separate and +independent analyses of the mark-recapture data and the distance sampling +data. For the independent observer configuration, the mark-recapture data +are analysed with a call to ddf.io.fi (see likelihood eq 6.8 +and 6.16 in Laake and Borchers 2004) to fit conditional distance sampling +detection functions to estimate p(0), detection probability at distance zero +for the independent observer team based on independence at zero (eq 6.22 in +Laake and Borchers 2004). Independently, the distance data, the union of the +observations from the independent observers, are used to fit a conventional +distance sampling (CDS) (likelihood eq 6.6) or multi-covariate distance +sampling (MCDS) (likelihood eq 6.14) model for the detection function, g(y), +such that g(0)=1. The detection function for the observer team is then +created as p(y)=p(0)*g(y) (eq 6.28 of Laake and Borchers 2004) from which +predictions are made. ddf.io is not called directly by the user and +is called from ddf with method="io".

    +

    For a complete description of each of the calling arguments, see +ddf. The argument dataname is the name of the +dataframe specified by the argument data in ddf. The arguments +dsmodel, mrmodel, control and meta.data are +defined the same as in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    + +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.rem.fi.html b/docs/reference/ddf.rem.fi.html new file mode 100644 index 00000000..4855bf7f --- /dev/null +++ b/docs/reference/ddf.rem.fi.html @@ -0,0 +1,158 @@ + +Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Distance Sampling (MRDS) Analysis of Removal Observer +Configuration with Full Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem.fi'
    +ddf(
    +  dsmodel = NULL,
    +  mrmodel,
    +  data,
    +  method,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    not used

    + + +
    mrmodel
    +

    mark-recapture model specification

    + + +
    data
    +

    analysis dataframe

    + + +
    method
    +

    analysis method; only needed if this function called from +ddf.io

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: an rem.fi model object

    +
    +
    +

    Details

    +

    The mark-recapture data derived from an removal observer distance sampling +survey can only derive conditional detection functions (p_j(y)) for both +observers (j=1) because technically it assumes that detection probability +does not vary by occasion (observer in this case). It is a conditional +detection function because detection probability for observer 1 is +conditional on the observations seen by either of the observers. Thus, +p_1(y) is estimated by p_1|2(y).

    +

    If detections by the observers are +independent (full independence) then p_1(y)=p_1|2(y) and for the union, full +independence means that p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) for each +distance y. In fitting the detection functions the likelihood from Laake +and Borchers (2004) are used. That analysis does not require the usual +distance sampling assumption that perpendicular distances are uniformly +distributed based on line placement that is random relative to animal +distribution. However, that assumption is used in computing predicted +detection probability which is averaged based on a uniform distribution (see +eq 6.11 of Laake and Borchers 2004).

    +

    For a complete description of each of the calling arguments, see +ddf. The argument model in this function is the same +as mrmodel in ddf. The argument dataname is the name +of the dataframe specified by the argument data in ddf. The +arguments control,meta.data,and method are defined the +same as in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.rem.html b/docs/reference/ddf.rem.html new file mode 100644 index 00000000..248efdb3 --- /dev/null +++ b/docs/reference/ddf.rem.html @@ -0,0 +1,157 @@ + +Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Distance Sampling (MRDS) Analysis of Removal Observer +Configuration and Point Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem'
    +ddf(
    +  dsmodel,
    +  mrmodel,
    +  data,
    +  method = NULL,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    distance sampling model specification; model list with key +function and scale formula if any

    + + +
    mrmodel
    +

    mark-recapture model specification; model list with formula +and link

    + + +
    data
    +

    analysis dataframe

    + + +
    method
    +

    not used

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: an rem model object which is composed of rem.fi and ds model + objects

    +
    +
    +

    Details

    +

    MRDS analysis based on point independence involves two separate and +independent analyses of the mark-recapture data and the distance sampling +data. For the removal observer configuration, the mark-recapture data are +analysed with a call to ddf.rem.fi (see Laake and Borchers +2004) to fit conditional distance sampling detection functions to estimate +p(0), detection probability at distance zero for the primary observer based +on independence at zero (eq 6.22 in Laake and Borchers 2004). Independently, +the distance data, the observations from the primary observer, are used to +fit a conventional distance sampling (CDS) (likelihood eq 6.6) or +multi-covariate distance sampling (MCDS) (likelihood eq 6.14) model for the +detection function, g(y), such that g(0)=1. The detection function for the +primary observer is then created as p(y)=p(0)*g(y) (eq 6.28 of Laake and +Borchers 2004) from which predictions are made. ddf.rem is not called +directly by the user and is called from ddf with +method="rem".

    +

    For a complete description of each of the calling arguments, see +ddf. The argument data is the dataframe specified by +the argument data in ddf. The arguments dsmodel, +mrmodel, control and meta.data are defined the same as +in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.trial.fi.html b/docs/reference/ddf.trial.fi.html new file mode 100644 index 00000000..f17a9b99 --- /dev/null +++ b/docs/reference/ddf.trial.fi.html @@ -0,0 +1,157 @@ + +Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Analysis of Trial Observer Configuration with Full +Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial.fi'
    +ddf(
    +  dsmodel = NULL,
    +  mrmodel,
    +  data,
    +  method,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    not used

    + + +
    mrmodel
    +

    mark-recapture model specification

    + + +
    data
    +

    analysis dataframe

    + + +
    method
    +

    analysis method; only needed if this function called from +ddf.trial

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: a trial.fi model object

    +
    +
    +

    Details

    +

    The mark-recapture data derived from a trial observer distance sampling +survey can be used to derive a conditional detection function (p_1(y)) for +observer 1 based on trials (observations) from observer 2. It is a +conditional detection function because detection probability for observer 1 +is based on seeing or not seeing observations made by observer 2. Thus, +p_1(y) is estimated by p_1|2(y). If detections by the observers are +independent (full independence) then p_1(y)=p_1|2(y) for each distance y. +In fitting the detection functions the likelihood given by eq 6.12 or 6.17 +in Laake and Borchers (2004) is used. That analysis does not require the +usual distance sampling assumption that perpendicular distances are +uniformly distributed based on line placement that is random relative to +animal distribution. However, that assumption is used in computing +predicted detection probability which is averaged based on a uniform +distribution (see eq 6.13 of Laake and Borchers 2004).

    +

    For a complete description of each of the calling arguments, see +ddf. The argument model in this function is the same +as mrmodel in ddf. The argument dataname is the name +of the dataframe specified by the argument data in ddf. The +arguments control,meta.data,and method are defined the +same as in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    + +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ddf.trial.html b/docs/reference/ddf.trial.html new file mode 100644 index 00000000..669935af --- /dev/null +++ b/docs/reference/ddf.trial.html @@ -0,0 +1,155 @@ + +Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Mark-Recapture Distance Sampling (MRDS) Analysis of Trial Observer +Configuration and Point Independence

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial'
    +ddf(
    +  dsmodel,
    +  mrmodel,
    +  data,
    +  method = NULL,
    +  meta.data = list(),
    +  control = list(),
    +  call = ""
    +)
    +
    + +
    +

    Arguments

    + + +
    dsmodel
    +

    distance sampling model specification; model list with key +function and scale formula if any

    + + +
    mrmodel
    +

    mark-recapture model specification; model list with formula +and link

    + + +
    data
    +

    analysis data.frame

    + + +
    method
    +

    not used

    + + +
    meta.data
    +

    list containing settings controlling data structure

    + + +
    control
    +

    list containing settings controlling model fitting

    + + +
    call
    +

    original function call used to call ddf

    + +
    +
    +

    Value

    +

    result: a trial model object which is composed of trial.fi and ds model objects

    +
    +
    +

    Details

    +

    MRDS analysis based on point independence involves two separate and +independent analyses of the mark-recapture data and the distance sampling +data. For the trial configuration, the mark-recapture data are analysed +with a call to ddf.trial.fi (see likelihood eq 6.12 and 6.17 +in Laake and Borchers 2004) to fit a conditional distance sampling detection +function for observer 1 based on trials (observations) from observer 2 to +estimate p_1(0), detection probability at distance zero for observer 1. +Independently, the distance data from observer 1 are used to fit a +conventional distance sampling (CDS) (likelihood eq 6.6) or multi-covariate +distance sampling (MCDS) (likelihood eq 6.14) model for the detection +function, g(y), such that g(0)=1. The detection function for observer 1 is +then created as p_1(y)=p_1(0)*g(y) (eq 6.28 of Laake and Borchers 2004) from +which predictions are made. ddf.trial is not called directly by the +user and is called from ddf with method="trial".

    +

    For a complete description of each of the calling arguments, see +ddf. The argument dataname is the name of the +dataframe specified by the argument data in ddf. The arguments +dsmodel, mrmodel, control and meta.data are +defined the same as in ddf.

    +
    +
    +

    References

    +

    Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete + detection at distance zero. In: Advanced Distance Sampling, eds. S.T. + Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. + Thomas. Oxford University Press.

    +
    + +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/det.tables-1.png b/docs/reference/det.tables-1.png new file mode 100644 index 00000000..9ddfcc76 Binary files /dev/null and b/docs/reference/det.tables-1.png differ diff --git a/docs/reference/det.tables.html b/docs/reference/det.tables.html new file mode 100644 index 00000000..e15ab3f6 --- /dev/null +++ b/docs/reference/det.tables.html @@ -0,0 +1,132 @@ + +Observation detection tables — det.tables • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates a series of tables for dual observer data that shows the number +missed and detected for each observer within defined distance classes.

    +
    + +
    +

    Usage

    +
    det.tables(model, nc = NULL, breaks = NULL)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    fitted model from ddf

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    breaks
    +

    user define breakpoints

    + +
    +
    +

    Value

    +

    list object of class "det.tables"

    +
    Observer1
    +

    table for +observer 1

    + +
    Observer2
    +

    table for observer 2

    +
    Duplicates
    +

    histogram counts +for duplicates

    + +
    Pooled
    +

    histogram counts for all observations by either observer

    + +
    Obs1_2
    +

    table for observer 1 within subset seen by observer 2

    + +
    Obs2_1
    +

    table for observer 2 within subset seen by observer 1

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(book.tee.data)
    +region <- book.tee.data$book.tee.region
    +egdata <- book.tee.data$book.tee.dataframe
    +samples <- book.tee.data$book.tee.samples
    +obs <- book.tee.data$book.tee.obs
    +xx <- ddf(mrmodel=~glm(formula=~distance*observer),
    +          dsmodel=~mcds(key="hn", formula=~sex),
    +          data=egdata, method="io", meta.data=list(width=4))
    +tabs <- det.tables(xx, breaks=c(0, 0.5, 1, 2, 3, 4))
    +par(mfrow=c(2, 2))
    +plot(tabs, new=FALSE, which=c(1, 2, 5, 6))
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/detfct.fit.html b/docs/reference/detfct.fit.html new file mode 100644 index 00000000..71e4b642 --- /dev/null +++ b/docs/reference/detfct.fit.html @@ -0,0 +1,166 @@ + +Fit detection function using key-adjustment functions — detfct.fit • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Fit detection function to observed distances using the key-adjustment +function approach. If adjustment functions are included it will alternate +between fitting parameters of key and adjustment functions and then all +parameters much like the approach in the CDS and MCDS Distance FORTRAN code. +To do so it calls detfct.fit.opt which uses the R optim function +which does not allow non-linear constraints so inclusion of adjustments does +allow the detection function to be non-monotone.

    +
    + +
    +

    Usage

    +
    detfct.fit(ddfobj, optim.options, bounds, misc.options)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    detection function object

    + + +
    optim.options
    +

    control options for optim

    + + +
    bounds
    +

    bounds for the parameters

    + + +
    misc.options
    +

    miscellaneous options

    + +
    +
    +

    Value

    +

    fitted detection function model object with the following list + structure

    +
    par
    +

    final parameter vector

    +
    value
    +

    final negative + log likelihood value

    +
    counts
    +

    number of function evaluations

    + +
    convergence
    +

    see codes in optim

    +
    message
    +

    string about + convergence

    +
    hessian
    +

    hessian evaluated at final parameter values

    + +
    aux
    +

    a list with 20 elements

    • maxit: maximum number + of iterations allowed for optimization

    • +
    • lower: lower bound values for + parameters

    • +
    • upper: upper bound values for parameters

    • +
    • setlower: + TRUE if they are user set bounds

    • +
    • setupper: TRUE if they are user set + bounds

    • +
    • point: TRUE if point counts and FALSE if line transect

    • +
    • int.range: integration range values

    • +
    • showit: integer value that + determines information printed during iteration

    • +
    • silent: option + to silence errors from detfct.fit.opt

    • +
    • integral.numeric + if TRUE compute logistic integrals numerically

    • +
    • breaks: breaks in distance for defined fixed bins for analysis

    • +
    • maxiter: maximum iterations used

    • +
    • refit: if TRUE, detection function + will be fitted more than once if parameters are at a boundary or when + convergence is not achieved

    • +
    • nrefits: number of refittings

    • +
    • mono: if TRUE monotonicity will be enforced

    • +
    • mono.strict: if TRUE, then strict monotonicity is enforced; otherwise weak

    • +
    • width: radius of point count or half-width of strip

    • +
    • standardize: if TRUE, detection function is scaled so g(0)=1

    • +
    • ddfobj: + distance detection function object; see create.ddfobj

    • +
    • bounded: TRUE if parameters ended up a boundary (I think)

    • +
    • model: + list of formulas for detection function model (probably can remove this)

    • +
    + +
    +
    +

    Author

    +

    Dave Miller; Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/detfct.fit.opt.html b/docs/reference/detfct.fit.opt.html new file mode 100644 index 00000000..01f7d2e7 --- /dev/null +++ b/docs/reference/detfct.fit.opt.html @@ -0,0 +1,169 @@ + +Fit detection function using key-adjustment functions — detfct.fit.opt • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Fit detection function to observed distances using the key-adjustment +function approach. If adjustment functions are included it will alternate +between fitting parameters of key and adjustment functions and then all +parameters much like the approach in the CDS and MCDS Distance FORTRAN code. +This function is called by the driver function detfct.fit, it then +calls the relevant optimisation routine, slsqp, +solnp or optimx.

    +
    + +
    +

    Usage

    +
    detfct.fit.opt(ddfobj, optim.options, bounds, misc.options, fitting = "all")
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    detection function object

    + + +
    optim.options
    +

    control options for optim

    + + +
    bounds
    +

    bounds for the parameters

    + + +
    misc.options
    +

    miscellaneous options

    + + +
    fitting
    +

    character string with values "all","key","adjust" to +determine which parameters are allowed to vary in the fitting

    + +
    +
    +

    Value

    +

    fitted detection function model object with the following list + structure

    +
    par
    +

    final parameter vector

    +
    value
    +

    final negative + log likelihood value

    +
    counts
    +

    number of function evaluations

    + +
    convergence
    +

    see codes in optim

    +
    message
    +

    string about + convergence

    +
    hessian
    +

    hessian evaluated at final parameter values

    + +
    aux
    +

    a list with 20 elements

    • maxit: maximum number + of iterations allowed for optimization

    • +
    • lower: lower bound values for + parameters

    • +
    • upper: upper bound values for parameters

    • +
    • setlower: + TRUE if they are user set bounds

    • +
    • setupper: TRUE if they are user set + bounds

    • +
    • point: TRUE if point counts and FALSE if line transect

    • +
    • int.range: integration range values

    • +
    • showit: integer value that + determines information printed during iteration

    • +
    • integral.numeric + if TRUE compute logistic integrals numerically

    • +
    • breaks: breaks in distance for defined fixed bins for analysis

    • +
    • maxiter: maximum iterations used

    • +
    • refit: if TRUE, detection function + will be fitted more than once if parameters are at a boundary or when + convergence is not achieved

    • +
    • nrefits: number of refittings

    • +
    • mono: if TRUE, monotonicity will be enforced

    • +
    • mono.strict: if TRUE, then strict monotonicity is enforced; otherwise weak

    • +
    • width: radius of point count or half-width of strip

    • +
    • standardize: if TRUE, detection function is scaled so g(0)=1

    • +
    • ddfobj: + distance detection function object; see create.ddfobj

    • +
    • bounded: TRUE if estimated parameters are at the bounds

    • +
    • model: + list of formulas for detection function model (probably can remove this)

    • +
    + +
    +
    +

    Author

    +

    Dave Miller; Jeff Laake; Lorenzo Milazzo; Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/dht.deriv.html b/docs/reference/dht.deriv.html new file mode 100644 index 00000000..52a0d341 --- /dev/null +++ b/docs/reference/dht.deriv.html @@ -0,0 +1,118 @@ + +Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes abundance at specified values of parameters for numerical +computation of first derivative with respect to parameters in detection +function. An internal function called by DeltaMethod which is invoked by +dht.se

    +
    + +
    +

    Usage

    +
    dht.deriv(par, model, obs, samples, options = list())
    +
    + +
    +

    Arguments

    + + +
    par
    +

    detection function parameter values

    + + +
    model
    +

    ddf model object

    + + +
    obs
    +

    observations table

    + + +
    samples
    +

    samples table

    + + +
    options
    +

    list of options as specified in dht

    + +
    +
    +

    Value

    +

    vector of abundance estimates at values of parameters specified in + par

    +
    +
    +

    Note

    +

    Internal function; not intended to be called by user

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/dht.html b/docs/reference/dht.html new file mode 100644 index 00000000..c5125383 --- /dev/null +++ b/docs/reference/dht.html @@ -0,0 +1,347 @@ + +Density and abundance estimates and variances — dht • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Compute density and abundance estimates and variances based on +Horvitz-Thompson-like estimator.

    +
    + +
    +

    Usage

    +
    dht(
    +  model,
    +  region.table,
    +  sample.table,
    +  obs.table = NULL,
    +  subset = NULL,
    +  se = TRUE,
    +  options = list()
    +)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    ddf model object

    + + +
    region.table
    +

    data.frame of region records. Two columns: +Region.Label and Area. If only density is required, one can +set Area=0 for all regions.

    + + +
    sample.table
    +

    data.frame of sample records. Three columns: +Region.Label, Sample.Label, Effort.

    + + +
    obs.table
    +

    data.frame of observation records with fields: +object, Region.Label, and Sample.Label which give links +to sample.table, region.table and the data records used in +model. Not necessary if the data.frame used to create the +model contains Region.Label, Sample.Label columns.

    + + +
    subset
    +

    subset statement to create obs.table

    + + +
    se
    +

    if TRUE computes standard errors, coefficient of variation +and confidence intervals (based on log-normal approximation). See +"Uncertainty" below.

    + + +
    options
    +

    a list of options that can be set, see "dht options", +below.

    + +
    +
    +

    Value

    +

    list object of class dht with elements:

    +
    clusters
    +

    result list for object clusters

    + +
    individuals
    +

    result list for individuals

    + +
    Expected.S
    +

    data.frame of estimates of expected cluster size + with fields Region, Expected.S and se.Expected.S + If each cluster size=1, then the result only includes individuals + and not clusters and Expected.S.

    + + +

    The list structure of clusters and individuals are the same:

    +
    bysample
    +

    data.frame giving results for each sample; +Nchat is the estimated abundance within the sample and Nhat is +scaled by surveyed area/covered area within that region

    + +
    summary
    +

    data.frame of summary statistics for each region and +total

    + +
    N
    +

    data.frame of estimates of abundance for each region and +total

    + +
    D
    +

    data.frame of estimates of density for each region and total

    + +
    average.p
    +

    average detection probability estimate

    + +
    cormat
    +

    correlation matrix of regional abundance/density estimates and +total (if more than one region)

    + +
    vc
    +

    list of 3: total variance-covariance matrix, detection function +component of variance and encounter rate component of variance. For +detection the v-c matrix and partial vector are returned

    + +
    Nhat.by.sample
    +

    another summary of Nhat by sample used by +dht.se

    + +
    +
    +

    Details

    +

    Density and abundance within the sampled region is computed based on a +Horvitz-Thompson-like estimator for groups and individuals (if a clustered +population) and this is extrapolated to the entire survey region based on +any defined regional stratification. The variance is based on replicate +samples within any regional stratification. For clustered populations, +\(E(s)\) and its standard error are also output.

    +

    Abundance is estimated with a Horvitz-Thompson-like estimator (Huggins 1989, +1991; Borchers et al 1998; Borchers and Burnham 2004). The abundance in the +sampled region is simply \(1/p_1 + 1/p_2 + ... + 1/p_n\) where \(p_i\) +is the estimated detection probability for the \(i\)th detection of +\(n\) total observations. It is not strictly a Horvitz-Thompson estimator +because the \(p_i\) are estimated and not known. For animals observed in +tight clusters, that estimator gives the abundance of groups +(group=TRUE in options) and the abundance of individuals is +estimated as \(s_1/p_1 + s_2/p_2 + ... + s_n/p_n\), where \(s_i\) is the +size (e.g., number of animals in the group) of each observation +(group=FALSE in options).

    +

    Extrapolation and estimation of abundance to the entire survey region is +based on either a random sampling design or a stratified random sampling +design. Replicate samples (lines) are specified within regional strata +region.table, if any. If there is no stratification, +region.table should contain only a single record with the Area +for the entire survey region. The sample.table is linked to the +region.table with the Region.Label. The obs.table is +linked to the sample.table with the Sample.Label and +Region.Label. Abundance can be restricted to a subset (e.g., for a +particular species) of the population by limiting the list the observations +in obs.table to those in the desired subset. Alternatively, if +Sample.Label and Region.Label are in the data.frame +used to fit the model, then a subset argument can be given in place +of the obs.table. To use the subset argument but include all +of the observations, use subset=1==1 to avoid creating an +obs.table.

    +

    In extrapolating to the entire survey region it is important that the unit +measurements be consistent or converted for consistency. A conversion factor +can be specified with the convert.units variable in the +options list. The values of Area in region.table, must +be made consistent with the units for Effort in sample.table +and the units of distance in the data.frame that was analyzed. +It is easiest to do if the units of Area is the square of the units +of Effort and then it is only necessary to convert the units of +distance to the units of Effort. For example, if Effort +was entered in kilometres and Area in square kilometres and +distance in metres then using +options=list(convert.units=0.001) would convert metres to kilometres, +density would be expressed in square kilometres which would then be +consistent with units for Area. However, they can all be in different +units as long as the appropriate composite value for convert.units is +chosen. Abundance for a survey region can be expressed as: A*N/a +where A is Area for the survey region, N is the +abundance in the covered (sampled) region, and a is the area of the +sampled region and is in units of Effort * distance. The sampled +region a is multiplied by convert.units, so it should be +chosen such that the result is in the same units of Area. For +example, if Effort was entered in kilometres, Area in hectares +(100m x 100m) and distance in metres, then using +options=list(convert.units=10) will convert a to units of +hectares (100 to convert metres to 100 metres for distance and .1 to convert +km to 100m units).

    +

    The argument options is a list of variable=value pairs that +set options for the analysis. All but two of these have been described above. +pdelta should not need to be changed but was included for +completeness. It controls the precision of the first derivative calculation +for the delta method variance. If the option areas.supplied is +TRUE then the covered area is assumed to be supplied in the +CoveredArea column of the sample data.frame.

    +
    +
    +

    Uncertainty

    + + +

    If the argument se=TRUE, standard errors for density and abundance is +computed. Coefficient of variation and log-normal confidence intervals are +constructed using a Satterthwaite approximation for degrees of freedom +(Buckland et al. 2001 p. 90). The function dht.se computes the +variance and interval estimates.

    +

    The variance has two components:

    • variation due to uncertainty from estimation of the detection + function parameters;

    • +
    • variation in abundance due to random sample selection;

    • +

    The first component (model parameter uncertainty) is computed using a delta +method estimate of variance (Huggins 1989, 1991, Borchers et al. 1998) in +which the first derivatives of the abundance estimator with respect to the +parameters in the detection function are computed numerically (see +DeltaMethod).

    +

    The second component (encounter rate variance) can be computed in one of +several ways depending on the form taken for the encounter rate and the +estimator used. To begin with there three possible values for varflag +to calculate encounter rate:

    • 0 uses a binomial variance for the number of observations + (equation 13 of Borchers et al. 1998). This estimator is only useful if the + sampled region is the survey region and the objects are not clustered; this + situation will not occur very often;

    • +
    • 1 uses the encounter rate \(n/L\) (objects observed per unit + transect) from Buckland et al. (2001) pg 78-79 (equation 3.78) for line + transects (see also Fewster et al, 2009 estimator R2). This variance + estimator is not appropriate if size or a derivative of size + is used in the detection function;

    • +
    • 2 is the default and uses the encounter rate estimator + \(\hat{N}/L\) (estimated abundance per unit transect) suggested by Innes + et al (2002) and Marques & Buckland (2004).

    • +

    In general if any covariates are used in the models, the default +varflag=2 is preferable as the estimated abundance will take into +account variability due to covariate effects. If the population is clustered +the mean group size and standard error is also reported.

    +

    For options 1 and 2, it is then possible to choose one of the +estimator forms given in Fewster et al (2009) for line transects: +"R2", "R3", "R4", "S1", "S2", +"O1", "O2" or "O3" by specifying the ervar= +option (default "R2"). For points, either the "P2" or +"P3" estimator can be selected (>=mrds 2.3.0 default "P2", +<= mrds 2.2.9 default "P3"). See varn and Fewster +et al (2009) for further details on these estimators.

    +
    +
    +

    dht options

    + + +

    Several options are available to control calculations and output:

    +
    ci.width
    +

    Confidence interval width, expressed as a decimal + between 0 and 1 (default 0.95, giving a 95% CI)

    + +
    pdelta
    +

    delta value for computing numerical first derivatives + (Default: 0.001)

    + +
    varflag
    +

    0,1,2 (see "Uncertainty") (Default: 2)

    + +
    convert.units
    +

    multiplier for width to convert to units of + length (Default: 1)

    + +
    ervar
    +

    encounter rate variance type (see "Uncertainty" and + type argument of varn). (Default: "R2" for + lines and "P2" for points)

    + + +
    +
    +

    References

    +

    Borchers, D.L., S.T. Buckland, P.W. Goedhart, E.D. Clarke, and S.L. Hedley. + 1998. Horvitz-Thompson estimators for double-platform line transect + surveys. Biometrics 54: 1221-1237.

    +

    Borchers, D.L. and K.P. Burnham. General formulation for distance sampling + pp 10-11 In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, + K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University + Press.

    +

    Buckland, S.T., D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and + L. Thomas. 2001. Introduction to Distance Sampling: Estimating Abundance + of Biological Populations. Oxford University Press.

    +

    Fewster, R.M., S.T. Buckland, K.P. Burnham, D.L. Borchers, P.E. Jupp, J.L. + Laake and L. Thomas. 2009. Estimating the encounter rate variance in + distance sampling. Biometrics 65: 225-236.

    +

    Huggins, R.M. 1989. On the statistical analysis of capture experiments. + Biometrika 76:133-140.

    +

    Huggins, R.M. 1991. Some practical aspects of a conditional likelihood + approach to capture experiments. Biometrics 47: 725-732.

    +

    Innes, S., M.P. Heide-Jorgensen, J.L. Laake, K.L. Laidre, H.J. Cleator, P. + Richard, and R.E.A. Stewart. 2002. Surveys of belugas and narwhals in the + Canadian High Arctic in 1996. NAMMCO Scientific Publications 4: 169-190.

    +

    Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for the detection + function. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    +
    +

    See also

    +

    print.dht dht.se

    +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/dht.se.html b/docs/reference/dht.se.html new file mode 100644 index 00000000..7c9b50d0 --- /dev/null +++ b/docs/reference/dht.se.html @@ -0,0 +1,204 @@ + +Variance and confidence intervals for density and abundance estimates — dht.se • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes standard error, cv, and log-normal confidence intervals for +abundance and density within each region (if any) and for the total of all +the regions. It also produces the correlation matrix for regional and total +estimates.

    +
    + +
    +

    Usage

    +
    dht.se(
    +  model,
    +  region.table,
    +  samples,
    +  obs,
    +  options,
    +  numRegions,
    +  estimate.table,
    +  Nhat.by.sample
    +)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    ddf model object

    + + +
    region.table
    +

    table of region values

    + + +
    samples
    +

    table of samples(replicates)

    + + +
    obs
    +

    table of observations

    + + +
    options
    +

    list of options that can be set (see dht)

    + + +
    numRegions
    +

    number of regions

    + + +
    estimate.table
    +

    table of estimate values

    + + +
    Nhat.by.sample
    +

    estimated abundances by sample

    + +
    +
    +

    Value

    +

    List with 2 elements:

    +
    estimate.table
    +

    completed table with se, +cv and confidence limits

    +
    vc
    +

    correlation matrix of estimates

    + +
    +
    +

    Details

    +

    The variance has two components:

    • variation due to uncertainty from estimation of the detection + function parameters;

    • +
    • variation in abundance due to random sample selection;

    • +

    The first component (model parameter uncertainty) is computed using a delta +method estimate of variance (Huggins 1989, 1991, Borchers et al. 1998) in +which the first derivatives of the abundance estimator with respect to the +parameters in the detection function are computed numerically (see +DeltaMethod).

    +

    The second component (encounter rate variance) can be computed in one of +several ways depending on the form taken for the encounter rate and the +estimator used. To begin with there three possible values for varflag +to calculate encounter rate:

    • 0 uses a binomial variance for the number of observations + (equation 13 of Borchers et al. 1998). This estimator is only useful if the + sampled region is the survey region and the objects are not clustered; this + situation will not occur very often;

    • +
    • 1 uses the encounter rate \(n/L\) (objects observed per unit + transect) from Buckland et al. (2001) pg 78-79 (equation 3.78) for line + transects (see also Fewster et al, 2009 estimator R2). This variance + estimator is not appropriate if size or a derivative of size + is used in the detection function;

    • +
    • 2 is the default and uses the encounter rate estimator + \(\hat{N}/L\) (estimated abundance per unit transect) suggested by Innes + et al (2002) and Marques & Buckland (2004).

    • +

    In general if any covariates are used in the models, the default +varflag=2 is preferable as the estimated abundance will take into +account variability due to covariate effects. If the population is clustered +the mean group size and standard error is also reported.

    +

    For options 1 and 2, it is then possible to choose one of the +estimator forms given in Fewster et al (2009). For line transects: +"R2", "R3", "R4", "S1", "S2", +"O1", "O2" or "O3" can be used by specifying the +ervar= option (default "R2"). For points, either the +"P2" or "P3" estimator can be selected (>=mrds 2.3.0 +default "P2", <= mrds 2.2.9 default "P3"). See +varn and Fewster et al (2009) for further details +on these estimators.

    +

    Exceptions to the above occur if there is only one sample in a stratum. In +that case it uses Poisson assumption (\(Var(x)=x\)) and it assumes a known +variance so \(z=1.96\) is used for critical value. In all other cases the +degrees of freedom for the \(t\)-distribution assumed for the +log(abundance) or log(density) is based on the Satterthwaite approximation +(Buckland et al. 2001 pg 90) for the degrees of freedom (df). The df are +weighted by the squared cv in combining the two sources of variation because +of the assumed log-normal distribution because the components are +multiplicative. For combining df for the sampling variance across regions +they are weighted by the variance because it is a sum across regions.

    +

    A non-zero correlation between regional estimates can occur from using a +common detection function across regions. This is reflected in the +correlation matrix of the regional and total estimates which is given in the +value list. It is only needed if subtotals of regional estimates are needed.

    +
    +
    +

    Note

    +

    This function is called by dht and it is not expected that the +user will call this function directly but it is documented here for +completeness and for anyone expanding the code or using this function in +their own code.

    +
    +
    +

    References

    +

    see dht

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/distpdf.grad.html b/docs/reference/distpdf.grad.html new file mode 100644 index 00000000..e74db4f7 --- /dev/null +++ b/docs/reference/distpdf.grad.html @@ -0,0 +1,145 @@ + +Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This function has been updated to match distpdf closely, so +that it has the same flexibility. Effectively, it gives the gradient of +distpdf or detfct, whichever one is specified.

    +
    + +
    +

    Usage

    +
    distpdf.grad(
    +  distance,
    +  par.index,
    +  ddfobj,
    +  standardize = FALSE,
    +  width,
    +  point,
    +  left = 0,
    +  pdf.based = TRUE
    +)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    vector of distances

    + + +
    par.index
    +

    the index of the parameter of interest

    + + +
    ddfobj
    +

    the ddf object

    + + +
    standardize
    +

    whether the function should return the gradient of the +standardized detection function g(x)/g(0) (TRUE), or simply of g(0) (FALSE). +Currently only implemented for standardize = FALSE.

    + + +
    width
    +

    the truncation width

    + + +
    point
    +

    are the data from point transects (TRUE) or line transects +(FALSE).

    + + +
    left
    +

    the left truncation (default 0)

    + + +
    pdf.based
    +

    is it the gradient of the non-normalised pdf (TRUE) or +the detection function (FALSE)? Default is TRUE.

    + +
    +
    +

    Value

    +

    the gradient of the non-normalised pdf or detection w.r.t. to +the parameter with parameter index par.index.

    +
    +
    +

    Details

    +

    Various functions used to specify key and adjustment functions for +gradients of detection functions.

    +

    So far, only developed for the half-normal, hazard-rate and uniform key +functions in combination with cosine, simple polynomial and Hermite +polynomial adjustments. It is only called by the gradient-based solver +and should not be called by the general user.

    +

    distpdf.grad will call either a half-normal, hazard-rate or uniform +function with adjustment terms to fit the data better, returning the +gradient of detection at that distance w.r.t. the parameters. The adjustments +are either cosine, Hermite or simple polynomial.

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/distpdf.html b/docs/reference/distpdf.html new file mode 100644 index 00000000..47545675 --- /dev/null +++ b/docs/reference/distpdf.html @@ -0,0 +1,216 @@ + +Detection functions — distpdf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Various functions used to specify key and adjustment functions for +detection functions.

    +
    + +
    +

    Usage

    +
    detfct(distance, ddfobj, select=NULL, index=NULL, width=NULL,
    +              standardize = TRUE, stdint=FALSE, left=0)
    +
    +adjfct.cos(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
    +
    +adjfct.poly(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
    +
    +adjfct.herm(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
    +
    +scalevalue(key.scale, z)
    +
    +keyfct.hn(distance, key.scale)
    +
    +keyfct.hz(distance, key.scale, key.shape)
    +
    +keyfct.gamma(distance, key.scale, key.shape)
    +
    +fx(distance,ddfobj,select=NULL,index=NULL,width=NULL,
    +   standardize=TRUE,stdint=FALSE, left=0)
    +
    +fr(distance,ddfobj,select=NULL,index=NULL,width=NULL,
    +   standardize=TRUE,stdint=FALSE)
    +
    +distpdf(distance,ddfobj,select=NULL,index=NULL,width=NULL,standardize=TRUE,
    +           stdint=FALSE,point=FALSE, left=0)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    vector of distances

    + + +
    ddfobj
    +

    distance sampling object (see create.ddfobj)

    + + +
    select
    +

    logical vector for selection of data values

    + + +
    index
    +

    specific data row index

    + + +
    width
    +

    (right) truncation width

    + + +
    standardize
    +

    logical used to decide whether to divide through by the +function evaluated at 0

    + + +
    stdint
    +

    logical used to decide whether integral is standardized

    + + +
    point
    +

    if TRUE, point counts; otherwise line transects

    + + +
    left
    +

    (left) truncation distance

    + + +
    z
    +

    design matrix for scale function

    + + +
    key.scale
    +

    vector of scale values

    + + +
    key.shape
    +

    vector of shape values

    + + +
    adj.order
    +

    vector of adjustment orders

    + + +
    adj.parm
    +

    vector of adjustment parameters

    + + +
    scaling
    +

    the scaling for the adjustment terms

    + + +
    adj.exp
    +

    if TRUE uses exp(adj) for adjustment to keep f(x)>0

    + +
    +
    +

    Value

    +

    For detfct, the value is a vector of detection probabilities +For keyfct.*, vector of key function evaluations +For adjfct.*, vector of adjustment series evaluations +For scalevalue, vector of the scale parameters.

    +
    +
    +

    Details

    +

    Multi-covariate detection functions (MCDS) are represented by a function +\(g(x,w,\theta)\) where x is distance, z is a set of covariates and +\(\theta\) is the parameter vector. The functions are defined such that +\(g(0,w,\theta)=1\) and the covariates modify the scale \((x/\sigma)\) +where a log link is used to relate \(\sigma\) to the covariates, +\(\sigma=exp(\theta*w)\). A CDS function is obtained with a constant +\(\sigma\) which is equivalent to an intercept design matrix, z.

    +

    detfct will call either a gamma, half-normal, hazard-rate or uniform +function only returning the probability of detection at that distance. In +addition to the simple model above, we may specify adjustment terms to fit +the data better. These adjustments are either Cosine, Hermite and simple +polynomials. These are specified as arguments to detfct, as detailed +below.

    +

    detfct function which calls the others and assembles the final result +using either key(x)[1+series(x)] or +(key(x)[1+series(x)])/(key(0)[1+series(0)]) (depending on the value of +standardize).

    +

    keyfct.* functions calculate key function values and adjfct.* +calculate adjustment term values.

    +

    scalevalue for either detection function it computes the scale with +the log link using the parameters and the covariate design matrix

    +

    fx, fr non-normalized probability density for line transects +and point counts respectively

    +
    +
    +

    References

    +

    Marques, F. F. C., & Buckland, S. T. (2003). Incorporating covariates into +standard line transect analyses. Biometrics, 59(4), 924-935.

    +

    Buckland, S. T., Anderson, D. R., Burnham, K. P., Laake, J. L., Borchers, D. +L., & Thomas, L. (2004). Advanced Distance Sampling. Oxford University +Press, Oxford, UK.

    +

    Becker, E. F. and P. X. Quang. 2009. A gamma-shaped detection function for +line transect surveys with mark-recapture and covariate data. Journal of +Agricultural Biological and Environmental Statistics 14:207-223.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ds.function.html b/docs/reference/ds.function.html new file mode 100644 index 00000000..450bee25 --- /dev/null +++ b/docs/reference/ds.function.html @@ -0,0 +1,130 @@ + +Distance Sampling Functions — ds.function • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes values of conditional and unconditional detection functions and +probability density functions for for line/point data for single observer or +dual observer in any of the 3 configurations (io,trial,rem).

    +
    + +
    +

    Usage

    +
    ds.function(
    +  model,
    +  newdata = NULL,
    +  obs = "All",
    +  conditional = FALSE,
    +  pdf = TRUE,
    +  finebr
    +)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    model object

    + + +
    newdata
    +

    dataframe at which to compute values; if NULL uses fitting data

    + + +
    obs
    +

    1 or 2 for observer 1 or 2, 3 for duplicates, "." for combined +and "All" to return all of the values

    + + +
    conditional
    +

    if FALSE, computes p(x) based on distance detection +function and if TRUE based on mr detection function

    + + +
    pdf
    +

    if FALSE, returns p(x) and if TRUE, returns p(x)*pi(x)/integral +p(x)*pi(x)

    + + +
    finebr
    +

    fine break values over which line is averaged

    + +
    +
    +

    Value

    +

    List containing

    +
    xgrid
    +

    grid of distance values

    + +
    values
    +

    average detection fct values at the xgrid values

    + +
    +
    +

    Details

    +

    Placeholder – Not functional —-

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/flnl.constr.grad.neg.html b/docs/reference/flnl.constr.grad.neg.html new file mode 100644 index 00000000..44c1192a --- /dev/null +++ b/docs/reference/flnl.constr.grad.neg.html @@ -0,0 +1,128 @@ + +(Negative) gradients of constraint function — flnl.constr.grad.neg • mrds + Skip to contents + + +
    +
    +
    + +
    +

    The function derives the gradients of the constraint function for +all model parameters, in the following order: +1. Scale parameter (if part of key function) +2. Shape parameter (if part of key function) +3. Adjustment parameter 1 +4. Adjustment parameter 2 +5. Etc.

    +
    + +
    +

    Usage

    +
    flnl.constr.grad.neg(pars, ddfobj, misc.options, fitting = "all")
    +
    + +
    +

    Arguments

    + + +
    pars
    +

    vector of parameter values for the detection function at which +the gradients of the negative log-likelihood should be evaluated

    + + +
    ddfobj
    +

    distance sampling object

    + + +
    misc.options
    +

    a list object containing all additional information such +as the type of optimiser or the truncation width, and is created within +ddf.ds

    + + +
    fitting
    +

    character string with values "all", "key", "adjust" to +determine which parameters are allowed to vary in the fitting. Not actually +used. Defaults to "all".

    + +
    +
    +

    Value

    +

    a matrix of gradients for all constraints (rows) w.r.t to every +parameters (columns)

    +
    +
    +

    Details

    +

    The constraint function itself is formed of a specified number of non-linear +constraints, which defaults to 20 and is specified through +misc.options$mono.points. The constraint function checks whether the +standardised detection function is 1) weakly/strictly monotonic at the +points and 2) non-negative at all the points. flnl.constr.grad returns +the gradients of those constraints w.r.t. all parameters of the detection +function, i.e., 2 times mono.points gradients for every parameter.

    +

    This function mostly follows the same structure as flnl.constr in +detfct.fit.mono.R.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/flnl.grad.html b/docs/reference/flnl.grad.html new file mode 100644 index 00000000..cdd2dae4 --- /dev/null +++ b/docs/reference/flnl.grad.html @@ -0,0 +1,137 @@ + +This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This function derives the gradients of the negative log likelihood function, +with respect to all parameters. It is based on the theory presented in +Introduction to Distance Sampling (2001) and Distance Sampling: Methods and +Applications (2015). It is not meant to be called by users of the mrds +and Distance packages directly but rather by the gradient-based +solver. This solver is use when our distance sampling model is for +single-observer data coming from either line or point transect and only when +the detection function contains an adjustment series but no covariates. It is +implement for the following key + adjustment series combinations for the +detections function: the key function can be half-normal, hazard-rate or +uniform, and the adjustment series can be cosine, simple polynomial or +Hermite polynomial. Data can be either binned or exact, but a combination +of the two has not been implemented yet.

    +
    + +
    +

    Usage

    +
    flnl.grad(pars, ddfobj, misc.options, fitting = "all")
    +
    + +
    +

    Arguments

    + + +
    pars
    +

    vector of parameter values for the detection function at which +the gradients of the negative log-likelihood should be evaluated

    + + +
    ddfobj
    +

    distance sampling object

    + + +
    misc.options
    +

    a list object containing all additional information such +as the type of optimiser or the truncation width, and is created by +ddf.ds

    + + +
    fitting
    +

    character string with values "all", "key", "adjust" to +determine which parameters are allowed to vary in the fitting. Not actually +used. Defaults to "all".

    + +
    +
    +

    Value

    +

    The gradients of the negative log-likelihood w.r.t. the parameters

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/flnl.html b/docs/reference/flnl.html new file mode 100644 index 00000000..c4b5ccb8 --- /dev/null +++ b/docs/reference/flnl.html @@ -0,0 +1,143 @@ + +Log-likelihood computation for distance sampling data — flnl • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For a specific set of parameter values, it computes and returns the negative +log-likelihood for the distance sampling likelihood for distances that are +unbinned, binned and a mixture of both. The function flnl is the +function minimized using optim from within +ddf.ds.

    +
    + +
    +

    Usage

    +
    flnl(fpar, ddfobj, misc.options, fitting = "all")
    +
    + +
    +

    Arguments

    + + +
    fpar
    +

    parameter values for detection function at which negative +log-likelihood should be evaluated

    + + +
    ddfobj
    +

    distance sampling object

    + + +
    misc.options
    +

    a list with the following elements: width +transect width; int.range the integration range for observations; +showit 0 to 3 controls level debug output; integral.numeric if +TRUE integral is computed numerically rather than analytically; +point is this a point transect?

    + + +
    fitting
    +

    character "key" if only fitting key function +parameters, "adjust" if fitting adjustment parameters or "all" +to fit both

    + +
    +
    +

    Value

    +

    negative log-likelihood value at the parameter values specified in +fpar

    +
    +
    +

    Details

    +

    Most of the computation is in flpt.lnl in which the negative +log-likelihood is computed for each observation. flnl is a wrapper +that optionally outputs intermediate results and sums the individual +log-likelihood values.

    +

    flnl is the main routine that manipulates the parameters using +getpar to handle fitting of key, adjustment or all of the +parameters. It then calls flpt.lnl to do the actual computation of +the likelihood. The probability density function for point counts is +fr and for line transects is fx. +fx=g(x)/mu (where g(x) is the detection function); whereas, +f(r)=r*g(r)/mu where mu in both cases is the normalizing constant. Both +functions are in source code file for link{detfct} and are called from +distpdf and the integral calculations are made with +integratepdf.

    +
    +
    +

    Note

    +

    These are internal functions used by ddf.ds to fit +distance sampling detection functions. It is not intended for the user to +invoke these functions but they are documented here for completeness.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/flt.var.html b/docs/reference/flt.var.html new file mode 100644 index 00000000..35ca78ee --- /dev/null +++ b/docs/reference/flt.var.html @@ -0,0 +1,111 @@ + +Hessian computation for fitted distance detection function model parameters — flt.var • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes hessian to be used for variance-covariance matrix. The hessian is +the outer product of the vector of first partials (see pg 62 of Buckland et +al 2002).

    +
    + +
    +

    Usage

    +
    flt.var(ddfobj, misc.options)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    distance sampling object

    + + +
    misc.options
    +

    width-transect width (W); int.range-integration range +for observations; showit-0 to 3 controls level of iteration printing; +integral.numeric-if TRUE integral is computed numerically rather +than analytically

    + +
    +
    +

    Value

    +

    variance-covariance matrix of parameters in the detection function

    +
    +
    +

    Note

    +

    This is an internal function used by ddf.ds to fit + distance sampling detection functions. It is not intended for the user to + invoke this function but it is documented here for completeness.

    +
    +
    +

    References

    +

    Buckland et al. 2002

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake and David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/g0.html b/docs/reference/g0.html new file mode 100644 index 00000000..7ad40bbd --- /dev/null +++ b/docs/reference/g0.html @@ -0,0 +1,88 @@ + +Compute value of p(0) using a logit formulation — g0 • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Compute value of p(0) using a logit formulation

    +
    + +
    +

    Usage

    +
    g0(beta, z)
    +
    + +
    +

    Arguments

    + + +
    beta
    +

    logistic parameters

    + + +
    z
    +

    design matrix of covariate values

    + +
    +
    +

    Value

    +

    vector of p(0) values

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/getpar.html b/docs/reference/getpar.html new file mode 100644 index 00000000..485ae323 --- /dev/null +++ b/docs/reference/getpar.html @@ -0,0 +1,122 @@ + +Extraction and assignment of parameters to vector — getpar • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Extracts parameters of a particular type (scale, +shape, adjustments or g0 (p(0))) from the vector of parameters in +ddfobj. All of the parameters are kept in a single vector for +optimization even though they have very different uses. assign.par +parses them from the vector based on a known structure and assigns them into +ddfobj. getpar extracts the requested types to be extracted +from ddfobj.

    +
    + +
    +

    Usage

    +
    getpar(ddfobj, fitting = "all", index = FALSE)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    distance sampling object (see create.ddfobj)

    + + +
    fitting
    +

    character string which is either "all","key","adjust" which +determines which parameters are retrieved

    + + +
    index
    +

    logical that determines whether parameters are returned (FALSE) +or starting indices in parameter vector for scale, shape, adjustment +parameters

    + +
    +
    +

    Value

    +

    index==FALSE, vector of parameters that were requested or + index==TRUE, vector of 3 indices for shape, scale, adjustment

    +
    +
    +

    Note

    +

    Internal functions not intended to be called by user.

    +
    +
    +

    See also

    +

    assign.par

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/gof.ds.html b/docs/reference/gof.ds.html new file mode 100644 index 00000000..302662b2 --- /dev/null +++ b/docs/reference/gof.ds.html @@ -0,0 +1,96 @@ + +Compute chi-square goodness-of-fit test for ds models — gof.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Compute chi-square goodness-of-fit test for ds models

    +
    + +
    +

    Usage

    +
    gof.ds(model, breaks = NULL, nc = NULL)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    ddf model object

    + + +
    breaks
    +

    distance cut points

    + + +
    nc
    +

    number of distance classes

    + +
    +
    +

    Value

    +

    list with chi-square value, df and p-value

    +
    +
    +

    See also

    +

    ddf.gof

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/gstdint.html b/docs/reference/gstdint.html new file mode 100644 index 00000000..5eb8afe1 --- /dev/null +++ b/docs/reference/gstdint.html @@ -0,0 +1,142 @@ + +Integral of pdf of distances — gstdint • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes the integral of distpdf with scale=1 (stdint=TRUE) or +specified scale (stdint=FALSE).

    +
    + +
    +

    Usage

    +
    gstdint(
    +  x,
    +  ddfobj,
    +  index = NULL,
    +  select = NULL,
    +  width,
    +  standardize = TRUE,
    +  point = FALSE,
    +  stdint = TRUE,
    +  doeachint = FALSE,
    +  left = left
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    lower, upper value for integration

    + + +
    ddfobj
    +

    distance detection function specification

    + + +
    index
    +

    specific data row index

    + + +
    select
    +

    logical vector for selection of data values

    + + +
    width
    +

    truncation width

    + + +
    standardize
    +

    if TRUE, divide through by the function evaluated +at 0

    + + +
    point
    +

    logical to determine if point (TRUE) or line +transect(FALSE)

    + + +
    stdint
    +

    if TRUE, scale=1 otherwise specified scale used

    + + +
    doeachint
    +

    if TRUE perform integration using +integrate

    + + +
    left
    +

    left truncation width

    + +
    +
    +

    Value

    +

    vector of integral values of detection function

    +
    +
    +

    Note

    +

    This is an internal function that is not intended to be invoked +directly.

    +
    +
    +

    Author

    +

    Jeff Laake and David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/histline.html b/docs/reference/histline.html new file mode 100644 index 00000000..a12d1f5c --- /dev/null +++ b/docs/reference/histline.html @@ -0,0 +1,139 @@ + +Plot histogram line — histline • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Takes bar heights (height) and cutpoints (breaks), and constructs a +line-only histogram from them using the function plot() (if lineonly==FALSE) +or lines() (if lineonly==TRUE).

    +
    + +
    +

    Usage

    +
    histline(
    +  height,
    +  breaks,
    +  lineonly = FALSE,
    +  outline = FALSE,
    +  ylim = range(height),
    +  xlab = "x",
    +  ylab = "y",
    +  det.plot = FALSE,
    +  add = FALSE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    height
    +

    heights of histogram bars

    + + +
    breaks
    +

    cutpoints for x

    + + +
    lineonly
    +

    if TRUE, drawn with plot; otherwise with lines to allow +addition of current plot

    + + +
    outline
    +

    if TRUE, only outline of histogram is plotted

    + + +
    ylim
    +

    limits for y axis

    + + +
    xlab
    +

    label for x axis

    + + +
    ylab
    +

    label for y axis

    + + +
    det.plot
    +

    if TRUE, plot is of detection so yaxis limited to unit +interval

    + + +
    add
    +

    should this plot add to a previous window

    + + +
    ...
    +

    Additional unspecified arguments for plot

    + +
    +
    +

    Value

    +

    None

    +
    +
    +

    Author

    +

    Jeff Laake and David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 00000000..354d3942 --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,889 @@ + +Package index • mrds + Skip to contents + + +
    +
    +
    + +
    +

    All functions

    + + + + +
    + + + + +
    + + add.df.covar.line() add_df_covar_line() + +
    +
    Add covariate levels detection function plots
    +
    + + adj.check.order() + +
    +
    Check order of adjustment terms
    +
    + + adj.cos() + +
    +
    Cosine adjustment term, not the series.
    +
    + + adj.herm() + +
    +
    Hermite polynomial adjustment term, not the series.
    +
    + + adj.poly() + +
    +
    Simple polynomial adjustment term, not the series.
    +
    + + adj.series.grad.cos() + +
    +
    Series of the gradient of the cosine adjustment series w.r.t. the scaled distance.
    +
    + + adj.series.grad.herm() + +
    +
    Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance.
    +
    + + adj.series.grad.poly() + +
    +
    Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance.
    +
    + + AIC(<ddf>) + +
    +
    Akaike's An Information Criterion for detection functions
    +
    + + apex.gamma() + +
    +
    Get the apex for a gamma detection function
    +
    + + assign.default.values() + +
    +
    Assign default values to list elements that have not been already assigned
    +
    + + average.line.cond() + +
    +
    Average conditional detection function line for plotting
    +
    + + average.line() + +
    +
    Average detection function line for plotting
    +
    + + book.tee.data + +
    +
    Golf tee data used in chapter 6 of Advanced Distance Sampling examples
    +
    + + calc.se.Np() + +
    +
    Find se of average p and N
    +
    + + cdf.ds() + +
    +
    Cumulative distribution function (cdf) for fitted distance sampling detection function
    +
    + + cds() + +
    +
    CDS function definition
    +
    + + check.bounds() + +
    +
    Check parameters bounds during optimisations
    +
    + + check.mono() + +
    +
    Check that a detection function is monotone
    +
    + + coef(<ds>) coef(<io>) coef(<io.fi>) coef(<trial>) coef(<trial.fi>) coef(<rem>) coef(<rem.fi>) + +
    +
    Extract coefficients
    +
    + + compute.Nht() + +
    +
    Horvitz-Thompson estimates 1/p_i or s_i/p_i
    +
    + + covered.region.dht() + +
    +
    Covered region estimate of abundance from Horvitz-Thompson-like estimator
    +
    + + create.bins() + +
    +
    Create bins from a set of binned distances and a set of cutpoints.
    +
    + + create.command.file() + +
    +
    create.command.file
    +
    + + create.model.frame() + +
    +
    Create a model frame for ddf fitting
    +
    + + create.varstructure() + +
    +
    Creates structures needed to compute abundance and variance
    +
    + + ddf(<ds>) + +
    +
    CDS/MCDS Distance Detection Function Fitting
    +
    + + ddf.gof() + +
    +
    Goodness of fit tests for distance sampling models
    +
    + + ddf(<io.fi>) + +
    +
    Mark-Recapture Distance Sampling (MRDS) IO - FI
    +
    + + ddf(<io>) + +
    +
    Mark-Recapture Distance Sampling (MRDS) IO - PI
    +
    + + ddf() + +
    +
    Distance Detection Function Fitting
    +
    + + ddf(<rem.fi>) + +
    +
    Mark-Recapture Distance Sampling (MRDS) Removal - FI
    +
    + + ddf(<rem>) + +
    +
    Mark-Recapture Distance Sampling (MRDS) Removal - PI
    +
    + + ddf(<trial.fi>) + +
    +
    Mark-Recapture Analysis of Trial Configuration - FI
    +
    + + ddf(<trial>) + +
    +
    Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI
    +
    + + DeltaMethod() + +
    +
    Numeric Delta Method approximation for the variance-covariance matrix
    +
    + + det.tables() + +
    +
    Observation detection tables
    +
    + + detfct.fit.opt() + +
    +
    Fit detection function using key-adjustment functions
    +
    + + detfct.fit() + +
    +
    Fit detection function using key-adjustment functions
    +
    + + dht.deriv() + +
    +
    Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator
    +
    + + dht() + +
    +
    Density and abundance estimates and variances
    +
    + + dht.se() + +
    +
    Variance and confidence intervals for density and abundance estimates
    +
    + + distpdf.grad() + +
    +
    Gradient of the non-normalised pdf of distances or the detection function for the distances.
    +
    + + ds.function() + +
    +
    Distance Sampling Functions
    +
    + + flnl.constr.grad.neg() + +
    +
    (Negative) gradients of constraint function
    +
    + + flnl.grad() + +
    +
    This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet.
    +
    + + flnl() + +
    +
    Log-likelihood computation for distance sampling data
    +
    + + flt.var() + +
    +
    Hessian computation for fitted distance detection function model parameters
    +
    + + g0() + +
    +
    Compute value of p(0) using a logit formulation
    +
    + + getpar() + +
    +
    Extraction and assignment of parameters to vector
    +
    + + gof.ds() + +
    +
    Compute chi-square goodness-of-fit test for ds models
    +
    + + gstdint() + +
    +
    Integral of pdf of distances
    +
    + + histline() + +
    +
    Plot histogram line
    +
    + + integratedetfct.logistic() + +
    +
    Integrate a logistic detection function
    +
    + + integratelogistic.analytic() + +
    +
    Analytically integrate logistic detection function
    +
    + + integratepdf.grad() + +
    +
    Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges.
    +
    + + integratepdf() + +
    +
    Numerically integrate pdf of observed distances over specified ranges
    +
    + + io.glm() + +
    +
    Iterative offset GLM/GAM for fitting detection function
    +
    + + is.linear.logistic() + +
    +
    Collection of functions for logistic detection functions
    +
    + + is.logistic.constant() + +
    +
    Is a logit model constant for all observations?
    +
    + + keyfct.grad.hn() + +
    +
    The gradient of the half-normal key function
    +
    + + keyfct.grad.hz() + +
    +
    The gradient of the hazard-rate key function
    +
    + + keyfct.th1() + +
    +
    Threshold key function
    +
    + + keyfct.th2() + +
    +
    Threshold key function
    +
    + + keyfct.tpn() + +
    +
    Two-part normal key function
    +
    + + lfbcvi + +
    +
    Black-capped vireo mark-recapture distance sampling analysis
    +
    + + lfgcwa + +
    +
    Golden-cheeked warbler mark-recapture distance sampling analysis
    +
    + + logisticbyx() + +
    +
    Logistic as a function of covariates
    +
    + + logisticbyz() + +
    +
    Logistic as a function of distance
    +
    + + logisticdetfct() + +
    +
    Logistic detection function
    +
    + + logisticdupbyx() + +
    +
    Logistic for duplicates as a function of covariates
    +
    + + logisticdupbyx_fast() + +
    +
    Logistic for duplicates as a function of covariates (fast)
    +
    + + logit() + +
    +
    Logit function
    +
    + + logLik(<ddf>) + +
    +
    log-likelihood value for a fitted detection function
    +
    + + mcds() + +
    +
    MCDS function definition
    +
    + + MCDS.exe MCDS mcds_dot_exe + +
    +
    Run MCDS.exe as a backend for mrds
    +
    + + mrds-package mrds + +
    +
    Mark-Recapture Distance Sampling (mrds)
    +
    + + mrds_opt + +
    +
    Tips on optimisation issues in mrds models
    +
    + + NCovered() + +
    +
    Compute estimated abundance in covered (sampled) region
    +
    + + nlminb_wrapper() + +
    +
    Wrapper around nlminb
    +
    + + p.det() + +
    +
    Double-platform detection probability
    +
    + + p.dist.table() p_dist_table() + +
    +
    Distribution of probabilities of detection
    +
    + + parse.optimx() + +
    +
    Parse optimx results and present a nice object
    +
    + + pdot.dsr.integrate.logistic() + +
    +
    Compute probability that a object was detected by at least one observer
    +
    + + plot(<det.tables>) + +
    +
    Observation detection tables
    +
    + + plot(<ds>) + +
    +
    Plot fit of detection functions and histograms of data from distance sampling model
    +
    + + plot(<io.fi>) + +
    +
    Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi)
    +
    + + plot(<io>) + +
    +
    Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model
    +
    + + plot(<rem.fi>) + +
    +
    Plot fit of detection functions and histograms of data from removal distance sampling model
    +
    + + plot(<rem>) + +
    +
    Plot fit of detection functions and histograms of data from removal distance sampling model
    +
    + + plot(<trial.fi>) + +
    +
    Plot fit of detection functions and histograms of data from distance sampling trial observer model
    +
    + + plot(<trial>) + +
    +
    Plot fit of detection functions and histograms of data from distance sampling trial observer model
    +
    + + plot_cond() + +
    +
    Plot conditional detection function from distance sampling model
    +
    + + plot_layout() + +
    +
    Layout for plot methods in mrds
    +
    + + plot_uncond() + +
    +
    Plot unconditional detection function from distance sampling model
    +
    + + predict(<ds>) predict(<io.fi>) predict(<io>) predict(<trial>) predict(<trial.fi>) predict(<rem>) predict(<rem.fi>) + +
    +
    Predictions from mrds models
    +
    + + print(<ddf.gof>) + +
    +
    Prints results of goodness of fit tests for detection functions
    +
    + + print(<ddf>) + +
    +
    Simple pretty printer for distance sampling analyses
    +
    + + print(<det.tables>) + +
    +
    Print results of observer detection tables
    +
    + + print(<dht>) + +
    +
    Prints density and abundance estimates
    +
    + + print(<p_dist_table>) + +
    +
    Print distribution of probabilities of detection
    +
    + + print(<summary.ds>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.io.fi>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.io>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.rem.fi>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.rem>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.trial.fi>) + +
    +
    Print summary of distance detection function model object
    +
    + + print(<summary.trial>) + +
    +
    Print summary of distance detection function model object
    +
    + + prob.deriv() + +
    +
    Derivatives for variance of average p and average p(0) variance
    +
    + + prob.se() + +
    +
    Average p and average p(0) variance
    +
    + + process.data() + +
    +
    Process data for fitting distance sampling detection function
    +
    + + pronghorn + +
    +
    Pronghorn aerial survey data from Wyoming
    +
    + + ptdata.distance + +
    +
    Single observer point count data example from Distance
    +
    + + ptdata.dual + +
    +
    Simulated dual observer point count data
    +
    + + ptdata.removal + +
    +
    Simulated removal observer point count data
    +
    + + ptdata.single + +
    +
    Simulated single observer point count data
    +
    + + qqplot.ddf() + +
    +
    Quantile-quantile plot and goodness of fit tests for detection functions
    +
    + + rem.glm() + +
    +
    Iterative offset model fitting of mark-recapture with removal model
    +
    + + rescale_pars() + +
    +
    Calculate the parameter rescaling for parameters associated with covariates
    +
    + + sample_ddf() + +
    +
    Generate data from a fitted detection function and refit the model
    +
    + + setbounds() + +
    +
    Set parameter bounds
    +
    + + setcov() + +
    +
    Creates design matrix for covariates in detection function
    +
    + + setinitial.ds() sethazard() + +
    +
    Set initial values for detection function based on distance sampling
    +
    + + sim.mix() + +
    +
    Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions.
    +
    + + solvecov() + +
    +
    Invert of covariance matrices
    +
    + + stake77 + +
    +
    Wooden stake data from 1977 survey
    +
    + + stake78 + +
    +
    Wooden stake data from 1978 survey
    +
    + + summary(<ds>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<io.fi>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<io>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<rem.fi>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<rem>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<trial.fi>) + +
    +
    Summary of distance detection function model object
    +
    + + summary(<trial>) + +
    +
    Summary of distance detection function model object
    +
    + + survey.region.dht() + +
    +
    Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region
    +
    + + test.breaks() + +
    +
    Test validity for histogram breaks(cutpoints)
    +
    + + varn() covn() + +
    +
    Compute empirical variance of encounter rate
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/integratedetfct.logistic.html b/docs/reference/integratedetfct.logistic.html new file mode 100644 index 00000000..3dea74cc --- /dev/null +++ b/docs/reference/integratedetfct.logistic.html @@ -0,0 +1,113 @@ + +Integrate a logistic detection function — integratedetfct.logistic • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Integrates a logistic detection function; a separate function is used because +in certain cases the integral can be solved analytically and also because +the scale trick used with the half-normal and hazard rate doesn't work +with the logistic.

    +
    + +
    +

    Usage

    +
    integratedetfct.logistic(x, scalemodel, width, theta1, integral.numeric, w)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    logistic design matrix values

    + + +
    scalemodel
    +

    scale model for logistic

    + + +
    width
    +

    transect width

    + + +
    theta1
    +

    parameters for logistic

    + + +
    integral.numeric
    +

    if TRUE computes numerical integral value

    + + +
    w
    +

    design covariates

    + +
    +
    +

    Value

    +

    vector of integral values

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/integratelogistic.analytic.html b/docs/reference/integratelogistic.analytic.html new file mode 100644 index 00000000..4dc1b982 --- /dev/null +++ b/docs/reference/integratelogistic.analytic.html @@ -0,0 +1,98 @@ + +Analytically integrate logistic detection function — integratelogistic.analytic • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes integral (analytically) over x from 0 to width of a logistic +detection function; For reference see integral #526 in CRC Std Math +Table 24th ed

    +
    + +
    +

    Usage

    +
    integratelogistic.analytic(x, models, beta, width)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    matrix of data

    + + +
    models
    +

    list of model formulae

    + + +
    beta
    +

    parameters of logistic detection function

    + + +
    width
    +

    transect half-width

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/integratepdf.grad.html b/docs/reference/integratepdf.grad.html new file mode 100644 index 00000000..6f038ec2 --- /dev/null +++ b/docs/reference/integratepdf.grad.html @@ -0,0 +1,132 @@ + +Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Gradient of the integral of the detection function, i.e., d beta/d theta in +the documentation. This gradient of the integral is the same as the integral +of the gradient, thanks to Leibniz integral rule.

    +
    + +
    +

    Usage

    +
    integratepdf.grad(
    +  par.index,
    +  ddfobj,
    +  int.range,
    +  width,
    +  standardize = FALSE,
    +  point = FALSE,
    +  left = 0,
    +  pdf.based = TRUE
    +)
    +
    + +
    +

    Arguments

    + + +
    par.index
    +

    the index of the parameter of interest

    + + +
    ddfobj
    +

    the ddf object

    + + +
    int.range
    +

    vector with the lower and upper bound of the integration

    + + +
    width
    +

    the truncation width

    + + +
    standardize
    +

    TRUE if the non-standardised detection function should +be integrated. Only implemented for standardize = FALSE, so users should not +touch this argument and it can probably be removed.

    + + +
    point
    +

    are the data from point transects (TRUE) or line transects +(FALSE).

    + + +
    left
    +

    the left truncation. Defaults to zero.

    + + +
    pdf.based
    +

    evaluate the non-normalised pdf or the detection function? +Default is TRUE.

    + +
    +
    +

    Details

    +

    For internal use only – not to be called by mrds or Distance +users directly.

    +
    +
    +

    Author

    +

    Felix Petersma

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/integratepdf.html b/docs/reference/integratepdf.html new file mode 100644 index 00000000..69dc2323 --- /dev/null +++ b/docs/reference/integratepdf.html @@ -0,0 +1,129 @@ + +Numerically integrate pdf of observed distances over specified ranges — integratepdf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes integral of pdf of observed distances over x for each observation. +The method of computation depends on argument switches set and the type of +detection function.

    +
    + +
    +

    Usage

    +
    integratepdf(
    +  ddfobj,
    +  select,
    +  width,
    +  int.range,
    +  standardize = TRUE,
    +  point = FALSE,
    +  left = 0,
    +  doeachint = FALSE
    +)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    distance detection function specification

    + + +
    select
    +

    logical vector for selection of data values

    + + +
    width
    +

    truncation width

    + + +
    int.range
    +

    integration range matrix; vector is converted to matrix

    + + +
    standardize
    +

    logical used to decide whether to divide through by the +function evaluated at 0

    + + +
    point
    +

    logical to determine if point count (TRUE) or line +transect (FALSE)

    + + +
    left
    +

    left truncation width

    + + +
    doeachint
    +

    calculate each integral numerically

    + +
    +
    +

    Value

    +

    vector of integral values - one for each observation

    +
    +
    +

    Author

    +

    Jeff Laake & Dave Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/io.glm.html b/docs/reference/io.glm.html new file mode 100644 index 00000000..352d5f37 --- /dev/null +++ b/docs/reference/io.glm.html @@ -0,0 +1,157 @@ + +Iterative offset GLM/GAM for fitting detection function — io.glm • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides an iterative algorithm for finding the MLEs of detection (capture) +probabilities for a two-occasion (double observer) mark-recapture experiment +using standard algorithms GLM/GAM and an offset to compensate for +conditioning on the set of observations. While the likelihood can be +formulated and solved numerically, the use of GLM/GAM provides all of the +available tools for fitting, predictions, plotting etc without any further +development.

    +
    + +
    +

    Usage

    +
    io.glm(
    +  datavec,
    +  fitformula,
    +  eps = 1e-05,
    +  iterlimit = 500,
    +  GAM = FALSE,
    +  gamplot = TRUE
    +)
    +
    + +
    +

    Arguments

    + + +
    datavec
    +

    dataframe

    + + +
    fitformula
    +

    logit link formula

    + + +
    eps
    +

    convergence criterion

    + + +
    iterlimit
    +

    maximum number of iterations allowed

    + + +
    GAM
    +

    uses GAM instead of GLM for fitting

    + + +
    gamplot
    +

    set to TRUE to get a gam plot object if GAM=TRUE

    + +
    +
    +

    Value

    +

    list of class("ioglm","glm","lm") or class("ioglm","gam")

    +
    glmobj
    +

    GLM or GAM object

    +
    offsetvalue
    +

    offsetvalues from + iterative fit

    +
    plotobj
    +

    gam plot object (if GAM & gamplot==TRUE, + else NULL)

    + +
    +
    +

    Details

    +

    Note that currently the code in this function for GAMs has been commented +out until the remainder of the mrds package will work with GAMs. This is an +internal function that is used as by ddf.io.fi to fit mark-recapture +models with 2 occasions. The argument mrmodel is used for +fitformula.

    +
    +
    +

    References

    +

    Buckland, S.T., J.M. breiwick, K.L. Cattanach, and J.L. Laake. + 1993. Estimated population size of the California gray whale. Marine + Mammal Science, 9:235-249.

    +

    Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. Marques, + J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance sampling. + pp: 360-363. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    +
    +

    Author

    +

    Jeff Laake, David Borchers, Charles Paxton

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/is.linear.logistic.html b/docs/reference/is.linear.logistic.html new file mode 100644 index 00000000..3b1f0df3 --- /dev/null +++ b/docs/reference/is.linear.logistic.html @@ -0,0 +1,121 @@ + +Collection of functions for logistic detection functions — is.linear.logistic • mrds + Skip to contents + + +
    +
    +
    + +
    +

    These functions are used to test whether a logistic detection function is a +linear function of distance (is.linear.logistic) or is constant +(varies by distance but no other covariates) is.logistic.constant). +Based on these tests, the most appropriate manner for integrating the +detection function with respect to distance is chosen. The integrals are +needed to estimate the average detection probability for a given set of +covariates.

    +
    + +
    +

    Usage

    +
    is.linear.logistic(xmat, g0model, zdim, width)
    +
    + +
    +

    Arguments

    + + +
    xmat
    +

    data matrix

    + + +
    g0model
    +

    logit model

    + + +
    zdim
    +

    number of columns in design matrix

    + + +
    width
    +

    transect width

    + +
    +
    +

    Value

    +

    Logical TRUE if condition holds and FALSE otherwise

    +
    +
    +

    Details

    +

    If the logit is linear in distance then the integral can be computed +analytically. If the logit is constant or only varies by distance then only +one integral needs to be computed rather than an integral for each +observation.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/is.logistic.constant.html b/docs/reference/is.logistic.constant.html new file mode 100644 index 00000000..033f5c08 --- /dev/null +++ b/docs/reference/is.logistic.constant.html @@ -0,0 +1,95 @@ + +Is a logit model constant for all observations? — is.logistic.constant • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Determines whether the specified logit model is constant for all +observations. If it is constant then only one integral needs to be computed.

    +
    + +
    +

    Usage

    +
    is.logistic.constant(xmat, g0model, width)
    +
    + +
    +

    Arguments

    + + +
    xmat
    +

    data

    + + +
    g0model
    +

    logit model

    + + +
    width
    +

    transect width

    + +
    +
    +

    Value

    +

    logical value

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/keyfct.grad.hn.html b/docs/reference/keyfct.grad.hn.html new file mode 100644 index 00000000..f5f27111 --- /dev/null +++ b/docs/reference/keyfct.grad.hn.html @@ -0,0 +1,92 @@ + +The gradient of the half-normal key function — keyfct.grad.hn • mrds + Skip to contents + + +
    +
    +
    + +
    +

    The key function contains one parameter, the scale. +Current implementation assumes that scaled dist is x/scale, not x/width

    +
    + +
    +

    Usage

    +
    keyfct.grad.hn(distance, key.scale)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    key.scale
    +

    vector of scale values

    + +
    +
    +

    Value

    +

    vector of derivatives of the half-normal key function w.r.t. the +scale parameter

    +
    +
    +

    Details

    +

    d key / d scale = exp(-y ^ 2 / (2 scale ^ 2)) * (y ^ 2 / scale ^ 3)

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/keyfct.grad.hz.html b/docs/reference/keyfct.grad.hz.html new file mode 100644 index 00000000..33e6e901 --- /dev/null +++ b/docs/reference/keyfct.grad.hz.html @@ -0,0 +1,109 @@ + +The gradient of the hazard-rate key function — keyfct.grad.hz • mrds + Skip to contents + + +
    +
    +
    + +
    +

    The key function contains two parameters, the scale and the shape, and +so the gradient is two-dimensional. Current implementation assumes that +scaled dist is x/scale, not x/width

    +
    + +
    +

    Usage

    +
    keyfct.grad.hz(distance, key.scale, key.shape, shape = FALSE)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    key.scale
    +

    vector of scale values

    + + +
    key.shape
    +

    vector of shape values

    + + +
    shape
    +

    is the gradient parameter the shape parameter? Defaults to FALSE

    + +
    +
    +

    Value

    +

    matrix of derivatives of the hazard rate key function w.r.t. the +scale parameter and the shape parameter.

    +
    +
    +

    Details

    +

    d key / d scale = (shape * exp(-(1/ (x/scale) ^ shape)) / + ((x/scale) ^ shape ) * scale) +d key / d shape = - ((log(x / scale) * exp(-(1/ (x/scale) ^ shape))) / + (x/scale) ^ shape)

    +

    When distance = 0, the gradients are also zero. However, the equation below +will result in NaN and (-)Inf due to operations such as log(0) or division by +zero. We correct for this in line 33.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/keyfct.th1.html b/docs/reference/keyfct.th1.html new file mode 100644 index 00000000..b48250e7 --- /dev/null +++ b/docs/reference/keyfct.th1.html @@ -0,0 +1,88 @@ + +Threshold key function — keyfct.th1 • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Threshold key function

    +
    + +
    +

    Usage

    +
    keyfct.th1(distance, key.scale, key.shape)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    key.scale
    +

    vector of scale values

    + + +
    key.shape
    +

    vector of shape values

    + +
    +
    +

    Value

    +

    vector of probabilities

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/keyfct.th2.html b/docs/reference/keyfct.th2.html new file mode 100644 index 00000000..44f8c0b3 --- /dev/null +++ b/docs/reference/keyfct.th2.html @@ -0,0 +1,88 @@ + +Threshold key function — keyfct.th2 • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Threshold key function

    +
    + +
    +

    Usage

    +
    keyfct.th2(distance, key.scale, key.shape)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    key.scale
    +

    vector of scale values

    + + +
    key.shape
    +

    vector of shape values

    + +
    +
    +

    Value

    +

    vector of probabilities

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/keyfct.tpn.html b/docs/reference/keyfct.tpn.html new file mode 100644 index 00000000..7a8a7bf7 --- /dev/null +++ b/docs/reference/keyfct.tpn.html @@ -0,0 +1,116 @@ + +Two-part normal key function — keyfct.tpn • mrds + Skip to contents + + +
    +
    +
    + +
    +

    The two-part normal detection function of Becker and Christ (2015). Either +side of an estimated apex in the distance histogram has a half-normal +distribution, with differing scale parameters. Covariates may be included +but affect both sides of the function.

    +
    + +
    +

    Usage

    +
    keyfct.tpn(distance, ddfobj)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    ddfobj
    +

    meta object containing parameters, design matrices etc

    + +
    +
    +

    Value

    +

    a vector of probabilities that the observation were detected given +they were at the specified distance and assuming that g(mu)=1

    +
    +
    +

    Details

    +

    Two-part normal models have 2 important parameters:

    • The apex, which estimates the peak in the detection function (where + g(x)=1). The log apex is reported in summary results, so taking the + exponential of this value should give the peak in the plotted function (see + examples).

    • +
    • The parameter that controls the difference between the sides + .dummy_apex_side, which is automatically added to the formula for a + two-part normal model. One can add interactions with this variable as + normal, but don't need to add the main effect as it will be automatically + added.

    • +
    +
    +

    References

    +

    Becker, E. F., & Christ, A. M. (2015). A Unimodal Model for Double Observer +Distance Sampling Surveys. PLOS ONE, 10(8), e0136403. +doi:10.1371/journal.pone.0136403

    +
    +
    +

    Author

    +

    Earl F Becker, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/lfbcvi.html b/docs/reference/lfbcvi.html new file mode 100644 index 00000000..ad80ad60 --- /dev/null +++ b/docs/reference/lfbcvi.html @@ -0,0 +1,194 @@ + +Black-capped vireo mark-recapture distance sampling analysis — lfbcvi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    These data represent avian point count surveys conducted at 453 point sample +survey locations on the 24,000 (approx) live-fire region of Fort Hood in +central Texas. Surveys were conducted by independent double observers (2 +per survey occasion) and as such we had a maximum of 3 paired survey +histories, giving a maximum of 6 sample occasions (see MacKenzie et al. +2006, MacKenzie and Royle 2005, and Laake et al. 2011 for various sample +survey design details). At each point, we surveyed for 5 minutes +(technically broken into 3 time intervals of 2, 2, and 1 minutes; not used +here) and we noted detections by each observer and collected distance to +each observation within a set of distance bins (0-25, 25-50, 50-75, 75-100m) +of the target species (Black-capped vireo's in this case) for each surveyor. +Our primary focus was to use mark-recapture distance sampling methods to +estimate density of Black-capped vireo's, and to estimate detection rates +for the mark-recapture, distance, and composite model.

    +
    + + +
    +

    Format

    +

    The format is a data frame with the following covariate metrics.

    VisitNumber
    +

    Visit number to the point

    + +
    Species
    +

    Species designation, either Golden-cheeked warbler (GW) or +Black-capped Vireo (BV)

    + +
    Distance
    +

    Distance measure, which is either NA (representing no +detection), or the median of the binned detection distances

    + +
    PairNumber
    +

    ID value indicating which observers were paired for that +sampling occasion

    + +
    Observer
    +

    Observer ID, either primary(1), or secondary (2)

    + +
    Detected
    +

    Detection of a bird, either 1 = detected, or 0 = not +detected

    + +
    Date
    +

    Date of survey since 15 march 2011

    + +
    Pred
    +

    Predicted occupancy value for that survey hexagon based on +Farrell et al. (2013)

    + +
    Category
    +

    Region.Label categorization, see mrds help file for +details on data structure

    + +
    Effort
    +

    Amount of survey effort at the point

    + +
    Day
    +

    Number of days since 15 March 2011

    + +
    ObjectID
    +

    Unique ID for each paired observations

    + +
    +
    +

    Details

    +

    In addition to detailing the analysis used by Collier et al. (2013, In +Review), this example documents the use of mrds for avian point count +surveys and shows how density models can be incorporated with occupancy +models to develop spatially explicit density surface maps. For those that +are interested, for the distance sampling portion of our analysis, we used +both conventional distance sampling (cds) and multiple covariate +distance sampling (mcds) with uniform and half-normal key functions. +For the mark-recapture portion of our analysis, we tended to use covariates +for distance (median bin width), observer, and date of survey (days since 15 +March 2011).

    +

    We combined our mrds density estimates via a Horvitz-Thompson styled +estimator with the resource selection function gradient developed in Farrell +et al. (2013) and estimated density on an ~3.14ha hexagonal grid across our +study area, which provided a density gradient for the Fort Hood military +installation. Because there was considerable data manipulation needed for +each analysis to structure the data appropriately for use in mrds, +rather than wrap each analysis in a single function, we have provided both +the Golden-cheeked warbler and Black-capped vireo analyses in their full +detail. The primary differences you will see will be changes to model +structures and model outputs between the two species.

    +
    +
    +

    References

    +

    Farrell, S.F., B.A. Collier, K.L. Skow, A.M. Long, A.J. +Campomizzi, M.L. Morrison, B. Hays, and R.N. Wilkins. 2013. Using +LiDAR-derived structural vegetation characteristics to develop +high-resolution, small-scale, species distribution models for conservation +planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1

    +

    Laake, J.L., B.A. Collier, M.L. Morrison, and R.N. Wilkins. +2011. Point-based mark recapture distance sampling. Journal of Agricultural, +Biological and Environmental Statistics 16: 389-408.

    +

    Collier, B.A., S.L. Farrell, K.L. Skow, A. M. Long, A.J. +Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, and R.N. Wilkins. 2013. +Spatially explicit density of +endangered avian species in a disturbed landscape. Auk, In Review.

    +
    +
    +

    Author

    +

    Bret Collier and Jeff Laake

    +
    + +
    +

    Examples

    + +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/lfgcwa.html b/docs/reference/lfgcwa.html new file mode 100644 index 00000000..11dd18bb --- /dev/null +++ b/docs/reference/lfgcwa.html @@ -0,0 +1,194 @@ + +Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa • mrds + Skip to contents + + +
    +
    +
    + +
    +

    These data represent avian point count surveys conducted at 453 point sample +survey locations on the 24,000 (approx) live-fire region of Fort Hood in +central Texas. Surveys were conducted by independent double observers (2 +per survey occasion) and as such we had a maximum of 3 paired survey +histories, giving a maximum of 6 sample occasions (see MacKenzie et al. +2006, MacKenzie and Royle 2005, and Laake et al. 2011 for various sample +survey design details). At each point, we surveyed for 5 minutes +(technically broken into 3 time intervals of 2, 2, and 1 minutes; not used +here) and we noted detections by each observer and collected distance to +each observation within a set of distance bins (0-50, 50-100m; Laake et al. +2011) of the target species (Golden-cheeked warblers in this case) for each +surveyor. Our primary focus was to use mark-recapture distance sampling +methods to estimate density of Golden-cheeked warblers, and to estimate +detection rates for the mark-recapture, distance, and composite model.

    +
    + + +
    +

    Format

    +

    The format is a data frame with the following covariate metrics.

    VisitNumber
    +

    Visit number to the point

    + +
    Species
    +

    Species designation, either Golden-cheeked warbler (GW) or +Black-capped Vireo (BV)

    + +
    Distance
    +

    Distance measure, which is either NA (representing no +detection), or the median of the binned detection distances

    + +
    PairNumber
    +

    ID value indicating which observers were paired for that +sampling occasion

    + +
    Observer
    +

    Observer ID, either primary(1), or secondary (2)

    + +
    Detected
    +

    Detection of a bird, either 1 = detected, or 0 = not +detected

    + +
    Date
    +

    Date of survey since 15 March 2011, numeric value

    + +
    Pred
    +

    Predicted occupancy value for that survey hexagon based on +Farrell et al. (2013)

    + +
    Category
    +

    Region.Label categorization, see R package mrds help +file for details on data structure

    + +
    Effort
    +

    Amount of survey effort at the point

    + +
    Day
    +

    Number of days since 15 March 2011, numeric value

    + +
    ObjectID
    +

    Unique ID for each paired observations

    + +
    +
    +

    Details

    +

    In addition to detailing the analysis used by Collier et al. +(2013, In Review), this example documents the use of mrds for avian +point count surveys and shows how density models can be incorporated with +occupancy models to develop spatially explicit density surface maps. For +those that are interested, for the distance sampling portion of our +analysis, we used both conventional distance sampling (cds) and +multiple covariate distance sampling (mcds) with uniform and +half-normal key functions. For the mark-recapture portion of our analysis, +we tended to use covariates for distance (median bin width), observer, and +date of survey (days since 15 March 2011).

    +

    We combined our mrds density estimates via a Horvitz-Thompson styled +estimator with the resource selection function gradient developed in Farrell +et al. (2013) and estimated density on an ~3.14ha hexagonal grid across our +study area, which provided a density gradient for Fort Hood. Because there +was considerable data manipulation needed for each analysis to structure the +data appropriately for use in mrds, rather than wrap each analysis in +a single function, we have provided both the Golden-cheeked warbler and +Black-capped vireo analyses in their full detail. The primary differences +you will see will be changes to model structures and model outputs between +the two species.

    +
    +
    +

    References

    +

    Farrell, S.F., B.A. Collier, K.L. Skow, A.M. Long, A.J. +Campomizzi, M.L. Morrison, B. Hays, and R.N. Wilkins. 2013. Using +LiDAR-derived structural vegetation characteristics to develop +high-resolution, small-scale, species distribution models for conservation +planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1

    +

    Laake, J.L., B.A. Collier, M.L. Morrison, and R.N. Wilkins. +2011. Point-based mark recapture distance sampling. Journal of Agricultural, +Biological and Environmental Statistics 16: 389-408.

    +

    Collier, B.A., S.L. Farrell, K.L. Skow, A.M. Long, A.J. +Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, and R.N. Wilkins. 2013. +Spatially explicit density of endangered avian species in a disturbed +landscape. Auk, In Review.

    +
    +
    +

    Author

    +

    Bret Collier and Jeff Laake

    +
    + +
    +

    Examples

    + +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logLik.ddf.html b/docs/reference/logLik.ddf.html new file mode 100644 index 00000000..64bf7d3b --- /dev/null +++ b/docs/reference/logLik.ddf.html @@ -0,0 +1,91 @@ + +log-likelihood value for a fitted detection function — logLik.ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Extract the log-likelihood from a fitted detection function.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ddf'
    +logLik(object, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a fitted detection function model object

    + + +
    ...
    +

    included for S3 completeness, but ignored

    + +
    +
    +

    Value

    +

    a numeric value giving the log-likelihood with two attributes: +"df" the "degrees of freedom" for the model (number of parameters) +and "nobs" the number of observations used to fit the model

    +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logisticbyx.html b/docs/reference/logisticbyx.html new file mode 100644 index 00000000..e1431897 --- /dev/null +++ b/docs/reference/logisticbyx.html @@ -0,0 +1,106 @@ + +Logistic as a function of covariates — logisticbyx • mrds + Skip to contents + + +
    +
    +
    + +
    +

    treats logistic as a function of covariates; for a given covariate +combination it computes function at with those covariate values at a +range of distances

    +
    + +
    +

    Usage

    +
    logisticbyx(distance, x, models, beta, point)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    vector of distance values

    + + +
    x
    +

    covariate data

    + + +
    models
    +

    model list

    + + +
    beta
    +

    logistic parameters

    + + +
    point
    +

    TRUE if a point transect model

    + +
    +
    +

    Value

    +

    vector of probabilities

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logisticbyz.html b/docs/reference/logisticbyz.html new file mode 100644 index 00000000..48bd4101 --- /dev/null +++ b/docs/reference/logisticbyz.html @@ -0,0 +1,99 @@ + +Logistic as a function of distance — logisticbyz • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Treats logistic as a function of distance; for a given distance it computes +function at all covariate values in data.

    +
    + +
    +

    Usage

    +
    logisticbyz(x, distance, models, beta)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    covariate data

    + + +
    distance
    +

    single distance value

    + + +
    models
    +

    model list

    + + +
    beta
    +

    logistic parameters

    + +
    +
    +

    Value

    +

    vector of probabilities

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logisticdetfct.html b/docs/reference/logisticdetfct.html new file mode 100644 index 00000000..20c100ec --- /dev/null +++ b/docs/reference/logisticdetfct.html @@ -0,0 +1,91 @@ + +Logistic detection function — logisticdetfct • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Logistic detection function

    +
    + +
    +

    Usage

    +
    logisticdetfct(distance, theta, w, std = FALSE)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    perpendicular distance vector

    + + +
    theta
    +

    scale parameters

    + + +
    w
    +

    scale covariate matrix

    + + +
    std
    +

    if TRUE uses scale=1

    +

    The routine returns a vector of probabilities that the observation +were detected given they were at the specified distance and assuming that +g(0)=1 (ie a standard line transect detection function).

    + +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logisticdupbyx.html b/docs/reference/logisticdupbyx.html new file mode 100644 index 00000000..1a571b79 --- /dev/null +++ b/docs/reference/logisticdupbyx.html @@ -0,0 +1,110 @@ + +Logistic for duplicates as a function of covariates — logisticdupbyx • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Treats logistic for duplicates as a function of covariate z; for a given z +it computes the function at with those covariate values at a range of +distances.

    +
    + +
    +

    Usage

    +
    logisticdupbyx(distance, x1, x2, models, beta, point)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    vector of distance values

    + + +
    x1
    +

    covariate data for fct 1

    + + +
    x2
    +

    covariate data for fct 2

    + + +
    models
    +

    model list

    + + +
    beta
    +

    logistic parameters

    + + +
    point
    +

    TRUE for point transect data

    + +
    +
    +

    Value

    +

    vector of probabilities

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logisticdupbyx_fast.html b/docs/reference/logisticdupbyx_fast.html new file mode 100644 index 00000000..a8287aa6 --- /dev/null +++ b/docs/reference/logisticdupbyx_fast.html @@ -0,0 +1,107 @@ + +Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast • mrds + Skip to contents + + +
    +
    +
    + +
    +

    As logisticdupbyx, but faster when distance is a covariate +(but no interactions with distance occur.

    +
    + +
    +

    Usage

    +
    logisticdupbyx_fast(distance, x1, x2, models, beta, point, beta_distance)
    +
    + +
    +

    Arguments

    + + +
    distance
    +

    vector of distance values

    + + +
    x1
    +

    linear predictor for 1, without distance

    + + +
    x2
    +

    linear predictor for 2, without distance

    + + +
    models
    +

    model list

    + + +
    beta
    +

    logistic parameters

    + + +
    point
    +

    TRUE for point transect data

    + + +
    beta_distance
    +

    parameter for distance

    + +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/logit.html b/docs/reference/logit.html new file mode 100644 index 00000000..6b08da50 --- /dev/null +++ b/docs/reference/logit.html @@ -0,0 +1,84 @@ + +Logit function — logit • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes logit transformation.

    +
    + +
    +

    Usage

    +
    logit(p)
    +
    + +
    +

    Arguments

    + + +
    p
    +

    probability

    + +
    +
    +

    Value

    +

    logit(p) returns [log(p/(1-p)]

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/mcds.html b/docs/reference/mcds.html new file mode 100644 index 00000000..a7ae5c18 --- /dev/null +++ b/docs/reference/mcds.html @@ -0,0 +1,141 @@ + +MCDS function definition — mcds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Creates model formula list for multiple covariate distance sampling using +values supplied in call to ddf

    +
    + +
    +

    Usage

    +
    mcds(
    +  formula = NULL,
    +  key = NULL,
    +  adj.series = NULL,
    +  adj.order = c(NULL),
    +  adj.scale = "width",
    +  adj.exp = FALSE,
    +  shape.formula = ~1
    +)
    +
    + +
    +

    Arguments

    + + +
    formula
    +

    formula for scale function

    + + +
    key
    +

    string identifying key function (currently either "hn" +(half-normal),"hr" (hazard-rate), "unif" (uniform) or "gamma" (gamma +distribution)

    + + +
    adj.series
    +

    string identifying adjustment functions cos (Cosine), herm +(Hermite polynomials), poly (simple polynomials) or NULL

    + + +
    adj.order
    +

    vector of order of adjustment terms to include

    + + +
    adj.scale
    +

    whether to scale the adjustment terms by "width" or "scale"

    + + +
    adj.exp
    +

    if TRUE uses exp(adj) for adjustment to keep f(x)>0

    + + +
    shape.formula
    +

    formula for shape function

    + +
    +
    +

    Value

    +

    A formula list used to define the detection function model

    +
    fct
    +

    string "mcds"

    +
    key
    +

    key function string

    + +
    adj.series
    +

    adjustment function string

    +
    adj.order
    +

    adjustment + function orders

    +
    adj.scale
    +

    adjustment function scale type

    + +
    formula
    +

    formula for scale function

    +
    shape.formula
    +

    formula + for shape function

    + +
    +
    +

    Author

    +

    Jeff Laake; Dave Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/mcds_dot_exe.html b/docs/reference/mcds_dot_exe.html new file mode 100644 index 00000000..d00a139b --- /dev/null +++ b/docs/reference/mcds_dot_exe.html @@ -0,0 +1,156 @@ + +Run MCDS.exe as a backend for mrds — MCDS.exe • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Rather than use the R-based detection function fitting algorithms provided in +`mrds`, one can also use the algorithm used by Distance for Windows, implemented +in the binary file `MCDS.exe`. Note that with changes in R-based optimizer introduced +in `mrds` version 3.0.0 this is unlikely to result in better estimates. +The option remains available, although it may be deprecated in a future release. +To make use of this facility, one must first download the `MCDS.exe` binary, as +laid out below under `Obtaining MCDS.exe`. Once the binary is installed, calls +to `ddf` will, by default, result in using the model being fit using both `MCDS.exe` +and the R-based algorithm, and the one with lower negative log-likelihood being selected. +In almost all cases, both algorithms produce the same results, but we have found edge +where one or other fails to find the likelihood maximum and hence trying both is useful.

    +
    + + +
    +

    Details

    +

    There may also be cases where the `MCDS.exe` algorithm is faster than the R-based one. +Under this circumstance, you can choose to run only the `MCDS.exe` algorithm via by setting +the `ddf` argument control=list(optimizer='MCDS'). For completeness, one can also +choose to use only the R-based algorithm by setting control=list(optimizer='R').

    +

    For more information and examples comparing the R-based and `MCDS.exe` algorithms, +see our examples pages at https://examples.distancesampling.org/

    +

    If you are running a non-Windows operating system, you can follow the +instructions below to have `MCDS.exe` run using `wine`.

    +
    +
    +

    Obtaining MCDS.exe

    + + +

    The following code can be used to download `MCDS.exe` from the distance +sampling website: +download.file("http://distancesampling.org/R/MCDS.exe", paste0(system.file(package="mrds"),"/MCDS.exe"), mode = "wb") +The MCDS binary will be installed to the main directory of your your local R +mrds library. Alternatively, you can copy the `MCDS.exe` from your local +Distance for Windows installation if you prefer. The location of your local +mrds library main directory can be found by running the following in R: +system.file("MCDS.exe", package="mrds").

    +
    +
    +

    Running MCDS.exe on non-Windows platforms

    + + +

    This has been tentatively tested on a mac but should currently be +considered largely experimental.

    +

    One can still use MCDS.exe even if you are running a mac computer. To +do this one will need to install `wine` a Windows emulator. It is important +to use a version of `wine` which can run 32-bit programs.

    +

    The package will attempt to work out which `wine` binary to use (and detect +if it is installed), but this doesn't always work. In this case, the +location of the `wine` binary can be specified in the `control` `list` +provided to `ddf` using the `winebin` element or supply the `winebin` +argument to the `ds` function. For example, if `wine` is installed at +`/usr/bin/local/wine` you can set `control$winebin` to that +location to use that binary.

    +

    On macOS, this can be achieved using the `homebrew` package management +system and installing the `wine-crossover` package. You may need to change +the control$winebin to be `wine`, `wine64` or `wine32on64`, +depending on your system's setup. This package tries to work out what to +do, but likely doesn't handle all corner cases. Currently this is untested +on Mac M1 systems.

    +
    +
    +

    Stopping using MCDS.exe

    + + +

    Once this feature is enabled, using `ddf` will by default run both +its built-in R optimizer and `MCDS.exe`. To disable this behaviour, specify which +you wish to use with via the optimizer= option described above. Alternatively, +if you wish to permanently stop using MCDS.exe, remove +the `MCDS.exe` binary file. You can find which folder it is in by running the following in R: +system.file("MCDS.exe", package="mrds").

    +
    +
    +

    Author

    +

    David L Miller and Jonah McArthur

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/mrds-package.html b/docs/reference/mrds-package.html new file mode 100644 index 00000000..8e565a06 --- /dev/null +++ b/docs/reference/mrds-package.html @@ -0,0 +1,113 @@ + +Mark-Recapture Distance Sampling (mrds) — mrds-package • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This package implements mark-recapture distance sampling + methods as described in D.L. Borchers, W. Zucchini and Fewster, + R.M. (1988), "Mark-recapture models for line transect surveys", + Biometrics 54: 1207-1220. and Laake, J.L. (1999) "Distance sampling + with independent observers: Reducing bias from heterogeneity by + weakening the conditional independence assumption." in Amstrup, + G.W., Garner, S.C., Laake, J.L., Manly, B.F.J., McDonald, L.L. and + Robertson, D.G. (eds) "Marine mammal survey and assessment + methods", Balkema, Rotterdam: 137-148 and Borchers, D.L., Laake, + J.L., Southwell, C. and Paxton, C.L.G. "Accommodating unmodelled + heterogeneity in double-observer distance sampling surveys". 2006. + Biometrics 62:372-378.)

    +
    + + +
    +

    Details

    +

    Examples of distance sampling analyses are available at +http://examples.distancesampling.org/.

    +

    For help with distance sampling and this package, there is a Google Group +https://groups.google.com/forum/#!forum/distance-sampling.

    +
    +
    +

    Author

    +

    Jeff Laake <jeff.laake@noaa.gov>, + David Borchers <dlb@mcs.st-and.ac.uk>, + Len Thomas <len@mcs.st-and.ac.uk>, + David L. Miller <dave@ninepointeightone.net>, + Jon Bishop <jonb@mcs.st-and.ac.uk>, + Felix Petersma <ftp@st-andrews.ac.uk>

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/mrds_opt.html b/docs/reference/mrds_opt.html new file mode 100644 index 00000000..73851da5 --- /dev/null +++ b/docs/reference/mrds_opt.html @@ -0,0 +1,177 @@ + +Tips on optimisation issues in mrds models — mrds_opt • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Occasionally when fitting an `mrds` model one can run into optimisation +issues. In general such problems can be quite complex so these "quick fixes" +may not work. If you come up against problems that are not fixed by these +tips, or you feel the results are dubious please go ahead and contact the +package authors.

    +
    + + +
    +

    Debug mode

    + + +

    One can obtain debug output at each stage of the optimisation using the +showit option. This is set via control, so adding +control=list(showit=3) gives the highest level of debug output +(setting showit to 1 or 2 gives less output).

    +
    +
    +

    Re-scaling covariates

    + + +

    Sometimes convergence issues in covariate (MCDS) models are caused by values +of the covariate being very large, so a rescaling of that covariate is then +necessary. Simply scaling by the standard deviation of the covariate can +help (e.g. dat$size.scaled <- dat$scale/sd(dat$scale) for a covariate +size, then including size.scaled in the model instead of +size).

    +

    It is important to note that one needs to use the original covariate (size) +when computing Horvitz-Thompson estimates of population size if the group +size is used in that estimate. i.e. use the unscaled size in the numerator +of the H-T estimator.

    +
    +
    +

    Factor levels

    + + +

    By default R will set the base factor level to be the label which comes +first alphabetically. Sometimes this can be an issue when that factor level +corresponds to a subset of the data with very few observations. This can +lead to very large uncertainty estimates (CVs) for model parameters. One way +around this is to use relevel to set the base level to a level +with more observations.

    +
    +
    +

    Initial values

    + + +

    Initial (or starting) values for the dsmodel can be set via the initial +element of the control list. initial is a list itself with +elements scale, shape and adjustment, corresponding to +the associated parameters. If a model has covariates then the scale or +shape elements will be vectors with parameter initial values in the +same order as they are specific in the model formula (using showit is +a good check they are in the correct order). Adjustment starting values are +in order of the order of that term (cosine order 2 is before cosine order 3 +terms).

    +

    One way of obtaining starting values is to fit a simpler model first (say +with fewer covariates or adjustments) and then use the starting values from +this simpler model for the corresponding parameters.

    +

    Another alternative to obtain starting values is to fit the model (or some +submodel) using Distance for Windows. Note that Distance reports the scale +parameter (or intercept in a covariate model) on the exponential scale, so +one must log this before supplying it to ddf.

    +
    +
    +

    Bounds

    + + +

    One can change the upper and lower bounds for the dsmodel parameters. These +specify the largest and smallest values individual parameters can be. By +placing these constraints on the parameters, it is possible to "temper" the +optimisation problem, making fitting possible.

    +

    Again, one uses the control list, the elements upperbounds and +lowerbounds. In this case, each of upperbounds and +lowerbounds are vectors, which one can think of as each of the +vectors shape, scale and adjustment from the "Initial +values" section above, concatenated in that order. If one does not occur +(e.g. no shape parameter) then it is simple omitted from the vector.

    +
    +
    +

    Conventional distance sampling optimizer choice

    + + +

    The key function plus adjustment approach of Conventional Distance Sampling (CDS) +can sometimes run into issues because it is sensible to constrain the fitted +detection function to be monotonic non-increasing (i.e., flat or going down) +with increasing distance - finding the maximum of the constrained likelihood +is more difficult than the same task without constraints.

    +

    There are several options within the `ddf` control argument that may help +if difficulties are encountered. These are documented in the ddf +manual page, and a few are mentioned below.

    +

    One potential strategy (as mentioned above) is to use better starting values for the +optimization. If mono.startvals is set to TRUE +then the detection function is first fit without adjustments and the resulting +scale (and shape) estimates used as starting values in the model with adjustments. +For even finer control, the initial option can be used as documented above.

    +

    Another potential thing to change is the constraint solver used. From `mrds` v 3.0.0 +a new constraint solver, `slsqp`, has been included as the default. This was found +to work better than the solver previously used (`solnp`) but if needed this solver +can be specified using the mono.method option of the control argument of +`ddf`.

    +

    It is also possible to use the optimizer implemented in Distance for Windows by downloading +a separate binary - see the manual page on mcds_dot_exe. If specified, this +will also be used for Multiple Covariate Distance Sampling (MCDS) analyses.

    +
    +
    +

    Author

    +

    David L. Miller <dave@ninepointeightone.net>

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/nlminb_wrapper.html b/docs/reference/nlminb_wrapper.html new file mode 100644 index 00000000..bf0b33b4 --- /dev/null +++ b/docs/reference/nlminb_wrapper.html @@ -0,0 +1,135 @@ + +Wrapper around nlminb — nlminb_wrapper • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This is a wrapper around nlminb to use scaling, as this is not available in +optimx.

    +
    + +
    +

    Usage

    +
    nlminb_wrapper(
    +  par,
    +  ll,
    +  ugr = NULL,
    +  lower = NULL,
    +  upper = NULL,
    +  mcontrol,
    +  hess = NULL,
    +  ddfobj,
    +  data,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    par
    +

    starting parameters

    + + +
    ll
    +

    log likelihood function

    + + +
    ugr
    +

    gradient function

    + + +
    lower
    +

    lower bounds on parameters

    + + +
    upper
    +

    upper bounds on parameters

    + + +
    mcontrol
    +

    control options

    + + +
    hess
    +

    hessian function

    + + +
    ddfobj
    +

    detection function specification object

    + + +
    data
    +

    the data

    + + +
    ...
    +

    anything else to pass to ll

    + +
    +
    +

    Value

    +

    optimx object

    +
    +
    +

    Author

    +

    David L Miller, modified from optimx.run by JC Nash, R +Varadhan, G Grothendieck.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/p.det.html b/docs/reference/p.det.html new file mode 100644 index 00000000..76a8da01 --- /dev/null +++ b/docs/reference/p.det.html @@ -0,0 +1,99 @@ + +Double-platform detection probability — p.det • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes detection probability for detection function computed from +mark-recapture data with possibly different link functions.

    +
    + +
    +

    Usage

    +
    p.det(dpformula, dplink, dppars, dpdata)
    +
    + +
    +

    Arguments

    + + +
    dpformula
    +

    formula for detection function

    + + + +

    link function ("logit","loglog","cloglog")

    + + +
    dppars
    +

    parameter vector

    + + +
    dpdata
    +

    double platform data

    + +
    +
    +

    Value

    +

    vector of predicted detection probabilities

    +
    +
    +

    Author

    +

    ?????

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/p.dist.table.html b/docs/reference/p.dist.table.html new file mode 100644 index 00000000..912f46ea --- /dev/null +++ b/docs/reference/p.dist.table.html @@ -0,0 +1,142 @@ + +Distribution of probabilities of detection — p.dist.table • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Generate a table of frequencies of probability of detection from a detection +function model. This is particularly useful when employing covariates, as it +can indicate if there are detections with very small detection probabilities +that can be unduly influential when calculating abundance estimates.

    +
    + +
    +

    Usage

    +
    p.dist.table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE)
    +
    +p_dist_table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    fitted detection function

    + + +
    bins
    +

    how the results should be binned

    + + +
    proportion
    +

    should proportions be returned as well as counts?

    + +
    +
    +

    Value

    +

    a data.frame with probability bins, counts and (optionally) +proportions. The object has an attribute p_range which contains the +range of estimated detection probabilities

    +
    +
    +

    Details

    +

    Because dht uses a Horvitz-Thompson-like estimator, abundance +estimates can be sensitive to errors in the estimated probabilities. The +estimator is based on \(\sum 1/ \hat{P}_a(z_i)\), which means that the +sensitivity is greater for smaller detection probabilities. As a rough +guide, we recommend that the method be not used if more than say 5% of the +\(\hat{P}_a(z_i)\) are less than 0.2, or if any are less than 0.1. If +these conditions are violated, the truncation distance w can be reduced. +This causes some loss of precision relative to standard distance sampling +without covariates.

    +
    +
    +

    References

    +

    Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for +the detection function. + In: Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. + Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University + Press.

    +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +# try out the tee data
    +data(book.tee.data)
    +egdata <- book.tee.data$book.tee.dataframe
    +# fit model with covariates
    +result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~sex+size),
    +              data = egdata[egdata$observer==1, ], method = "ds",
    +              meta.data = list(width = 4))
    +# print table
    +p.dist.table(result)
    +# with proportions
    +p.dist.table(result, proportion=TRUE)
    +} # }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/parse.optimx.html b/docs/reference/parse.optimx.html new file mode 100644 index 00000000..ce675686 --- /dev/null +++ b/docs/reference/parse.optimx.html @@ -0,0 +1,88 @@ + +Parse optimx results and present a nice object — parse.optimx • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Take the resulting object from a call to optimx and make it into an object that mrds wants to talk to.

    +
    + +
    +

    Usage

    +
    parse.optimx(lt, lnl.last, par.last)
    +
    + +
    +

    Arguments

    + + +
    lt
    +

    an optimx object

    + + +
    lnl.last
    +

    last value of the log likelihood

    + + +
    par.last
    +

    last value of the parameters

    + +
    +
    +

    Value

    +

    lt object that can be used later on

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/pdot.dsr.integrate.logistic.html b/docs/reference/pdot.dsr.integrate.logistic.html new file mode 100644 index 00000000..da02d110 --- /dev/null +++ b/docs/reference/pdot.dsr.integrate.logistic.html @@ -0,0 +1,145 @@ + +Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes probability that a object was detected by at least one observer +(pdot or p_.) for a logistic detection function that contains +distance.

    +
    + +
    +

    Usage

    +
    pdot.dsr.integrate.logistic(
    +  right,
    +  width,
    +  beta,
    +  x,
    +  integral.numeric,
    +  BT,
    +  models,
    +  GAM = FALSE,
    +  rem = FALSE,
    +  point = FALSE
    +)
    +
    + +
    +

    Arguments

    + + +
    right
    +

    either an integration range for binned data (vector of 2) or +the rightmost value for integration (from 0 to right)

    + + +
    width
    +

    transect width

    + + +
    beta
    +

    parameters of logistic detection function

    + + +
    x
    +

    data matrix

    + + +
    integral.numeric
    +

    set to TRUE unless data are binned (done in +this fct) or the model is such that distance is not linear (eg distance^2), +If integral.numeric is FALSE it will compute the integral +analytically. It should only be FALSE if is.linear.logistic function +is TRUE.

    + + +
    BT
    +

    FALSE except for the trial configuration; BT stands for +Buckland-Turnock who initially proposed a trial configuration for dual +observers

    + + +
    models
    +

    list of models including g0model

    + + +
    GAM
    +

    Not used at present. The idea was to be able to use a GAM for +g(0) portion of detection function; should always be F

    + + +
    rem
    +

    only TRUE for the removal configuration but not used and +could be removed if pulled from the function calls. Originally thought the +pdot integral would differ but it is the same as the io formula. The only +thing that differs with removal is that p(2|1)=1. Observer 2 sees everything +seen by observer 1,

    + + +
    point
    +

    TRUE for point transects

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.det.tables-1.png b/docs/reference/plot.det.tables-1.png new file mode 100644 index 00000000..02530856 Binary files /dev/null and b/docs/reference/plot.det.tables-1.png differ diff --git a/docs/reference/plot.det.tables.html b/docs/reference/plot.det.tables.html new file mode 100644 index 00000000..048f52a7 --- /dev/null +++ b/docs/reference/plot.det.tables.html @@ -0,0 +1,169 @@ + +Observation detection tables — plot.det.tables • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plot the tables created by det.tables. Produces a series of +tables for dual observer data that shows the number missed and detected for +each observer within defined distance classes.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'det.tables'
    +plot(
    +  x,
    +  which = 1:6,
    +  angle = NULL,
    +  density = NULL,
    +  col1 = "white",
    +  col2 = "lightgrey",
    +  new = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    object returned by det.tables

    + + +
    which
    +

    items in x to plot (vector with values in 1:6)

    + + +
    angle
    +

    shading angle for hatching

    + + +
    density
    +

    shading density for hatching

    + + +
    col1
    +

    plotting colour for total histogram bars.

    + + +
    col2
    +

    plotting colour for subset histogram bars.

    + + +
    new
    +

    if TRUE new plotting window for each plot

    + + +
    ...
    +

    other graphical parameters, passed to plotting functions

    + +
    +
    +

    Value

    +

    Just plots.

    +
    +
    +

    Details

    +

    Plots that are produced are as follows (controlled by the which +argument):

    1
    +

    Detected by either observer/Detected by observer 1

    + +
    2
    +

    Detected by either observer/Detected by observer 2

    + +
    3
    +

    Seen by both observers

    + +
    4
    +

    Seen by either observer

    + +
    5
    +

    Detected by observer 2/Detected by observer 1 | 2

    + +
    6
    +

    Detected by observer 1/Detected by observer 2 | 1

    + + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(book.tee.data)
    +region <- book.tee.data$book.tee.region
    +egdata <- book.tee.data$book.tee.dataframe
    +samples <- book.tee.data$book.tee.samples
    +obs <- book.tee.data$book.tee.obs
    +xx <- ddf(mrmodel=~glm(formula=~distance*observer),
    +          dsmodel = ~mcds(key = "hn", formula = ~sex),
    +          data = egdata, method = "io", meta.data = list(width = 4))
    +tabs <- det.tables(xx,breaks=c(0,.5,1,2,3,4))
    +par(mfrow=c(2,3))
    +plot(tabs,which=1:6,new=FALSE)
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.ds-1.png b/docs/reference/plot.ds-1.png new file mode 100644 index 00000000..a89b4dbd Binary files /dev/null and b/docs/reference/plot.ds-1.png differ diff --git a/docs/reference/plot.ds-2.png b/docs/reference/plot.ds-2.png new file mode 100644 index 00000000..d5f5c964 Binary files /dev/null and b/docs/reference/plot.ds-2.png differ diff --git a/docs/reference/plot.ds-3.png b/docs/reference/plot.ds-3.png new file mode 100644 index 00000000..6ee6e8a0 Binary files /dev/null and b/docs/reference/plot.ds-3.png differ diff --git a/docs/reference/plot.ds-4.png b/docs/reference/plot.ds-4.png new file mode 100644 index 00000000..e24f427a Binary files /dev/null and b/docs/reference/plot.ds-4.png differ diff --git a/docs/reference/plot.ds.html b/docs/reference/plot.ds.html new file mode 100644 index 00000000..15ba5121 --- /dev/null +++ b/docs/reference/plot.ds.html @@ -0,0 +1,220 @@ + +Plot fit of detection functions and histograms of data from distance sampling model — plot.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection function(s) with a histogram of the observed +distances to compare visually the fitted model and data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ds'
    +plot(
    +  x,
    +  which = 2,
    +  breaks = NULL,
    +  nc = NULL,
    +  jitter.v = rep(0, 3),
    +  showpoints = TRUE,
    +  subset = NULL,
    +  pl.col = "lightgrey",
    +  pl.den = NULL,
    +  pl.ang = NULL,
    +  main = NULL,
    +  pages = 0,
    +  pdf = FALSE,
    +  ylim = NULL,
    +  xlab = "Distance",
    +  ylab = NULL,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf.

    + + +
    which
    +

    index to specify which plots should be produced:

    1histogram of observed distances
    2histogram of observed distances with fitted line and + points (default)
    + + +
    breaks
    +

    user defined breakpoints

    + + +
    nc
    +

    number of equal width bins for histogram

    + + +
    jitter.v
    +

    apply jitter to points by multiplying the fitted value by a +random draw from a normal distribution with mean 1 and sd jitter.v.

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for +each observation (conditional on its observed distance).

    + + +
    subset
    +

    subset of data to plot.

    + + +
    pl.col
    +

    colour for histogram bars.

    + + +
    pl.den
    +

    shading density for histogram bars.

    + + +
    pl.ang
    +

    shading angle for histogram bars.

    + + +
    main
    +

    plot title.

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    pdf
    +

    plot the histogram of distances with the PDF of the probability +of detection overlaid. Ignored (with warning) for line transect models.

    + + +
    ylim
    +

    vertical axis limits.

    + + +
    xlab
    +

    horizontal axis label (defaults to "Distance").

    + + +
    ylab
    +

    vertical axis label (default automatically set depending on plot +type).

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, +points, etc).

    + +
    +
    +

    Value

    +

    Just plots.

    +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.ds but its arguments are +documented here. Instead the generic plot command should be used and +it will call the appropriate function based on the class of the ddf +object.

    +
    +
    +

    See also

    +

    add_df_covar_line

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers, David L Miller

    +
    + +
    +

    Examples

    +
    # \donttest{
    +# fit a model to the tee data
    +data(book.tee.data)
    +egdata <- book.tee.data$book.tee.dataframe
    +xx <- ddf(dsmodel=~mcds(key="hn", formula=~sex),
    +          data=egdata[egdata$observer==1, ],
    +          method="ds", meta.data=list(width=4))
    +
    +# not showing predicted probabilities
    +plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), showpoints=FALSE)
    +
    +
    +# two subsets
    +plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==0)
    +
    +plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==1)
    +
    +
    +# put both plots on one page
    +plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), pages=1, which=1:2)
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.io-1.png b/docs/reference/plot.io-1.png new file mode 100644 index 00000000..99a84851 Binary files /dev/null and b/docs/reference/plot.io-1.png differ diff --git a/docs/reference/plot.io-2.png b/docs/reference/plot.io-2.png new file mode 100644 index 00000000..2d76690d Binary files /dev/null and b/docs/reference/plot.io-2.png differ diff --git a/docs/reference/plot.io-3.png b/docs/reference/plot.io-3.png new file mode 100644 index 00000000..e744458f Binary files /dev/null and b/docs/reference/plot.io-3.png differ diff --git a/docs/reference/plot.io-4.png b/docs/reference/plot.io-4.png new file mode 100644 index 00000000..0ec7ea20 Binary files /dev/null and b/docs/reference/plot.io-4.png differ diff --git a/docs/reference/plot.io-5.png b/docs/reference/plot.io-5.png new file mode 100644 index 00000000..cc1c4f2d Binary files /dev/null and b/docs/reference/plot.io-5.png differ diff --git a/docs/reference/plot.io-6.png b/docs/reference/plot.io-6.png new file mode 100644 index 00000000..870a5168 Binary files /dev/null and b/docs/reference/plot.io-6.png differ diff --git a/docs/reference/plot.io-7.png b/docs/reference/plot.io-7.png new file mode 100644 index 00000000..457c5b62 Binary files /dev/null and b/docs/reference/plot.io-7.png differ diff --git a/docs/reference/plot.io-8.png b/docs/reference/plot.io-8.png new file mode 100644 index 00000000..d2ee997e Binary files /dev/null and b/docs/reference/plot.io-8.png differ diff --git a/docs/reference/plot.io.fi-1.png b/docs/reference/plot.io.fi-1.png new file mode 100644 index 00000000..b89e5629 Binary files /dev/null and b/docs/reference/plot.io.fi-1.png differ diff --git a/docs/reference/plot.io.fi-2.png b/docs/reference/plot.io.fi-2.png new file mode 100644 index 00000000..2c2a5b97 Binary files /dev/null and b/docs/reference/plot.io.fi-2.png differ diff --git a/docs/reference/plot.io.fi-3.png b/docs/reference/plot.io.fi-3.png new file mode 100644 index 00000000..9f93174a Binary files /dev/null and b/docs/reference/plot.io.fi-3.png differ diff --git a/docs/reference/plot.io.fi-4.png b/docs/reference/plot.io.fi-4.png new file mode 100644 index 00000000..315d5705 Binary files /dev/null and b/docs/reference/plot.io.fi-4.png differ diff --git a/docs/reference/plot.io.fi-5.png b/docs/reference/plot.io.fi-5.png new file mode 100644 index 00000000..cc1c4f2d Binary files /dev/null and b/docs/reference/plot.io.fi-5.png differ diff --git a/docs/reference/plot.io.fi-6.png b/docs/reference/plot.io.fi-6.png new file mode 100644 index 00000000..870a5168 Binary files /dev/null and b/docs/reference/plot.io.fi-6.png differ diff --git a/docs/reference/plot.io.fi-7.png b/docs/reference/plot.io.fi-7.png new file mode 100644 index 00000000..0db33886 Binary files /dev/null and b/docs/reference/plot.io.fi-7.png differ diff --git a/docs/reference/plot.io.fi-8.png b/docs/reference/plot.io.fi-8.png new file mode 100644 index 00000000..d2ee997e Binary files /dev/null and b/docs/reference/plot.io.fi-8.png differ diff --git a/docs/reference/plot.io.fi.html b/docs/reference/plot.io.fi.html new file mode 100644 index 00000000..2b901a21 --- /dev/null +++ b/docs/reference/plot.io.fi.html @@ -0,0 +1,229 @@ + +Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io.fi'
    +plot(
    +  x,
    +  which = 1:6,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Plot primary unconditional detection function
    2Plot secondary unconditional detection function
    3Plot pooled unconditional detection function
    4Plot duplicate unconditional detection function
    5Plot primary conditional detection function
    6Plot secondary conditional detection function

    Note that the order of which is ignored and plots are produced in the above +order.

    + + +
    breaks
    +

    user define breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the average +detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for each +observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Value

    +

    Just plots.

    +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.io.fi but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers, David L Miller

    +
    + +
    +

    Examples

    +
    # \donttest{
    +library(mrds)
    +data(book.tee.data)
    +egdata <- book.tee.data$book.tee.dataframe
    +result.io.fi <- ddf(mrmodel=~glm(~distance), data = egdata, method = "io.fi",
    +              meta.data = list(width = 4))
    +
    +# just plot everything
    +plot(result.io.fi)
    +
    +
    +
    +
    +
    +
    +
    +# Plot primary and secondary unconditional detection functions on one page
    +# and  primary and secondary conditional detection functions on another
    +plot(result.io.fi,which=c(1,2,5,6),pages=2)
    +
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.io.html b/docs/reference/plot.io.html new file mode 100644 index 00000000..584a3fb3 --- /dev/null +++ b/docs/reference/plot.io.html @@ -0,0 +1,229 @@ + +Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io'
    +plot(
    +  x,
    +  which = 1:6,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Plot primary unconditional detection function
    2Plot secondary unconditional detection function
    3Plot pooled unconditional detection function
    4Plot duplicate unconditional detection function
    5Plot primary conditional detection function
    6Plot secondary conditional detection function

    Note that the order of which is ignored and plots are produced in the above +order.

    + + +
    breaks
    +

    user define breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the average +detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for each +observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Value

    +

    Just plots

    +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.io.fi but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers, David L Miller

    +
    + +
    +

    Examples

    +
    # \donttest{
    +library(mrds)
    +data(book.tee.data)
    +egdata <- book.tee.data$book.tee.dataframe
    +result.io <- ddf(dsmodel=~cds(key = "hn"), mrmodel=~glm(~distance),
    +                 data=egdata, method="io", meta.data=list(width=4))
    +
    +# just plot everything
    +plot(result.io)
    +
    +
    +
    +
    +
    +
    +
    +# Plot primary and secondary unconditional detection functions on one page
    +# and  primary and secondary conditional detection functions on another
    +plot(result.io,which=c(1,2,5,6),pages=2)
    +
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.rem.fi.html b/docs/reference/plot.rem.fi.html new file mode 100644 index 00000000..0e9c0612 --- /dev/null +++ b/docs/reference/plot.rem.fi.html @@ -0,0 +1,198 @@ + +Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem.fi'
    +plot(
    +  x,
    +  which = 1:3,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Plot primary unconditional detection function
    2Plot pooled unconditional detection function
    3Plot conditional (1|2) detection function
    + + +
    breaks
    +

    user defined breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the +average detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for +each observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.rem.fi but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.rem.html b/docs/reference/plot.rem.html new file mode 100644 index 00000000..2c677b11 --- /dev/null +++ b/docs/reference/plot.rem.html @@ -0,0 +1,198 @@ + +Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem'
    +plot(
    +  x,
    +  which = 1:3,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Plot primary unconditional detection function
    2Plot pooled unconditional detection function
    3Plot conditional (1|2) detection function
    + + +
    breaks
    +

    user define breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the +average detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for +each observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.rem but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.trial.fi.html b/docs/reference/plot.trial.fi.html new file mode 100644 index 00000000..0d5451ee --- /dev/null +++ b/docs/reference/plot.trial.fi.html @@ -0,0 +1,198 @@ + +Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial.fi'
    +plot(
    +  x,
    +  which = 1:2,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Unconditional detection function for observer 1
    2Conditional detection function plot (1|2)
    + + +
    breaks
    +

    user define breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the +average detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for +each observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.io.fi but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot.trial.html b/docs/reference/plot.trial.html new file mode 100644 index 00000000..98942423 --- /dev/null +++ b/docs/reference/plot.trial.html @@ -0,0 +1,198 @@ + +Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots the fitted detection functions for a distance sampling model and +histograms of the distances (for unconditional detection functions) or +proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial'
    +plot(
    +  x,
    +  which = 1:2,
    +  breaks = NULL,
    +  nc = NULL,
    +  maintitle = "",
    +  showlines = TRUE,
    +  showpoints = TRUE,
    +  ylim = c(0, 1),
    +  angle = NULL,
    +  density = NULL,
    +  col = "lightgrey",
    +  jitter = NULL,
    +  divisions = 25,
    +  pages = 0,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    fitted model from ddf

    + + +
    which
    +

    index to specify which plots should be produced.

    1Unconditional detection function for observer 1
    2Conditional detection function plot (1|2)
    + + +
    breaks
    +

    user define breakpoints

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    showlines
    +

    logical variable; if TRUE a line representing the average +detection probability is plotted

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for each +observation

    + + +
    ylim
    +

    range of vertical axis; defaults to (0,1)

    + + +
    angle
    +

    shading angle for histogram bars.

    + + +
    density
    +

    shading density for histogram bars.

    + + +
    col
    +

    colour for histogram bars.

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    divisions
    +

    number of divisions for averaging line values; default = 25

    + + +
    pages
    +

    the number of pages over which to spread the plots. For +example, if pages=1 then all plots will be displayed on one page. +Default is 0, which prompts the user for the next plot to be displayed.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Details

    +

    The structure of the histogram can be controlled by the user-defined +arguments nc or breaks. The observation specific detection +probabilities along with the line representing the fitted average detection +probability.

    +

    It is not intended for the user to call plot.io.fi but its arguments +are documented here. Instead the generic plot command should be used +and it will call the appropriate function based on the class of the +ddf object.

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot_cond.html b/docs/reference/plot_cond.html new file mode 100644 index 00000000..8eb1fa21 --- /dev/null +++ b/docs/reference/plot_cond.html @@ -0,0 +1,183 @@ + +Plot conditional detection function from distance sampling model — plot_cond • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plot proportion of observations detected within distance intervals (for +conditional detection functions) to compare visually the fitted model and +data. Internal function called by plot methods.

    +
    + +
    +

    Usage

    +
    plot_cond(
    +  obs,
    +  xmat,
    +  gxvalues,
    +  model,
    +  nc,
    +  breaks,
    +  finebr,
    +  showpoints,
    +  showlines,
    +  maintitle,
    +  ylim,
    +  angle = -45,
    +  density = 20,
    +  col = "black",
    +  jitter = NULL,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    obs
    +

    observer code

    + + +
    xmat
    +

    processed data

    + + +
    gxvalues
    +

    detection function values for each observation

    + + +
    model
    +

    fitted model from ddf

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    breaks
    +

    user define breakpoints

    + + +
    finebr
    +

    fine break values over which line is averaged

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value +for each observation

    + + +
    showlines
    +

    logical variable; if TRUE plots average predicted +value line

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    ylim
    +

    range of y axis (default c(0,1))

    + + +
    angle
    +

    shading angle for hatching

    + + +
    density
    +

    shading density for hatching

    + + +
    col
    +

    plotting colour

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot_layout.html b/docs/reference/plot_layout.html new file mode 100644 index 00000000..64a9ecf6 --- /dev/null +++ b/docs/reference/plot_layout.html @@ -0,0 +1,94 @@ + +Layout for plot methods in mrds — plot_layout • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This function does the paging, using devAskNewPage(). This means we +can just call plots and R will make the prompt for us +Warning, this function has side effects! It modifies devAskNewPage!

    +
    + +
    +

    Usage

    +
    plot_layout(which, pages)
    +
    + +
    +

    Arguments

    + + +
    which
    +

    which plots are to be created

    + + +
    pages
    +

    number of pages to span the plots across

    + +
    +
    +

    Details

    +

    Code is stolen and modified from plot.R in mgcv by Simon Wood

    +
    +
    +

    Author

    +

    David L. Miller, based on code by Simon N. Wood

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/plot_uncond.html b/docs/reference/plot_uncond.html new file mode 100644 index 00000000..184c45a6 --- /dev/null +++ b/docs/reference/plot_uncond.html @@ -0,0 +1,192 @@ + +Plot unconditional detection function from distance sampling model — plot_uncond • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Plots unconditional detection function for observer=obs observations +overlays histogram, average detection function and values for individual +observations data. Internal function called by plot methods.

    +
    + +
    +

    Usage

    +
    plot_uncond(
    +  model,
    +  obs,
    +  xmat,
    +  gxvalues,
    +  nc,
    +  finebr,
    +  breaks,
    +  showpoints,
    +  showlines,
    +  maintitle,
    +  ylim,
    +  return.lines = FALSE,
    +  angle = -45,
    +  density = 20,
    +  col = "black",
    +  jitter = NULL,
    +  xlab = "Distance",
    +  ylab = "Detection probability",
    +  subtitle = TRUE,
    +  ...
    +)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    fitted model from ddf

    + + +
    obs
    +

    value of observer for plot

    + + +
    xmat
    +

    processed data

    + + +
    gxvalues
    +

    detection function values for each observation

    + + +
    nc
    +

    number of equal-width bins for histogram

    + + +
    finebr
    +

    fine break values over which line is averaged

    + + +
    breaks
    +

    user define breakpoints

    + + +
    showpoints
    +

    logical variable; if TRUE plots predicted value for each +observation

    + + +
    showlines
    +

    logical variable; if TRUE plots average predicted value line

    + + +
    maintitle
    +

    main title line for each plot

    + + +
    ylim
    +

    range of y axis; defaults to (0,1)

    + + +
    return.lines
    +

    if TRUE, returns values for line

    + + +
    angle
    +

    shading angle for hatching

    + + +
    density
    +

    shading density for hatching

    + + +
    col
    +

    plotting colour

    + + +
    jitter
    +

    scaling option for plotting points. Jitter is applied to +points by multiplying the fitted value by a random draw from a normal +distribution with mean 1 and sd jitter.

    + + +
    xlab
    +

    label for x-axis

    + + +
    ylab
    +

    label for y-axis

    + + +
    subtitle
    +

    if TRUE, shows plot type as sub-title

    + + +
    ...
    +

    other graphical parameters, passed to the plotting functions +(plot, hist, lines, points, etc)

    + +
    +
    +

    Value

    +

    if return.lines==TRUE returns dataframe average.line + otherwise just plots

    +
    +
    +

    Author

    +

    Jeff Laake, Jon Bishop, David Borchers

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/predict.ds.html b/docs/reference/predict.ds.html new file mode 100644 index 00000000..f7aae5ec --- /dev/null +++ b/docs/reference/predict.ds.html @@ -0,0 +1,209 @@ + +Predictions from mrds models — predict.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Predict detection probabilities (or effective strip widths/effective areas +of detection) from a fitted distance sampling model using either the +original data (i.e. "fitted" values) or using new data.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ds'
    +predict(object, newdata=NULL, compute=FALSE,
    +int.range=NULL, esw=FALSE, se.fit=FALSE, ...)
    +       # S3 method for class 'io.fi'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, integrate=FALSE, ...)
    +       # S3 method for class 'io'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, ...)
    +       # S3 method for class 'trial'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, ...)
    +       # S3 method for class 'trial.fi'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, integrate=FALSE, ...)
    +       # S3 method for class 'rem'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, ...)
    +       # S3 method for class 'rem.fi'
    +predict(object, newdata=NULL, compute=FALSE,
    +       int.range=NULL, integrate=FALSE, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    ddf model object.

    + + +
    newdata
    +

    new data.frame for prediction, this must include a +column called "distance".

    + + +
    compute
    +

    if TRUE compute values and don't use the fitted values +stored in the model object.

    + + +
    int.range
    +

    integration range for variable range analysis; either +vector or 2 column matrix.

    + + +
    esw
    +

    if TRUE, returns effective strip half-width (or effective +area of detection for point transect models) integral from 0 to the +truncation distance (width) of \(p(y)dy\); otherwise it returns the +integral from 0 to truncation width of \(p(y)\pi(y)\) where +\(\pi(y)=1/w\) for lines and \(\pi(y)=2r/w^2\) for points.

    + + +
    se.fit
    +

    for *.ds models only, generate standard errors on the +predicted probabilities of detection (or ESW if esw=TRUE), stored in +the se.fit element

    + + +
    ...
    +

    for S3 consistency

    + + +
    integrate
    +

    for *.fi methods, see Details below.

    + +
    +
    +

    Value

    +

    For all but the exceptions below, the value is a list with a single +element: fitted, a vector of average detection probabilities or esw +values for each observation in the original data ornewdata

    +

    For predict.ds, if se.fit=TRUE there is an additional element +$se.fit, which contains the standard errors of the probabilities of +detection or ESW.

    +

    For predict.io.fi,predict.trial.fi,predict.rem.fi with +integrate=TRUE, the value is a list with one element: fitted, +which is a vector of integrated (average) detection probabilities for each +observation in the original data or newdata.

    +

    For predict.io.fi, predict.trial.fi, or predict.rem.fi +with integrate=FALSE, the value is a list with the following +elements:

    fitted
    +

    \(p(y)\) values

    + +
    p1
    +

    \(p_{1|2}(y)\), conditional detection probability for + observer 1

    + +
    p2
    +

    \(p_{2|1}(y)\), conditional detection probability for + observer 2

    + +
    fitted
    +

    \(p_.(y) = p_{1|2}(y) + p_{2|1}(y) - p_{1|2}(y) * + p_{2|1}(y)\), conditional detection probability of being seen by either + observer

    + +
    +
    +

    Details

    +

    The first 4 arguments are the same in each predict function. The latter 2 +are specific to certain functions. For line transects, the effective strip +half-width (esw=TRUE) is the integral of the fitted detection +function over either 0 to W or the specified int.range. The +predicted detection probability is the average probability which is simply +the integral divided by the distance range. For point transect models, +esw=TRUE calculates the effective area of detection (commonly +referred to as "nu", this is the integral of 2/width^2 * rg(r).

    +

    Fitted detection probabilities are stored in the model object and +these are returned unless compute=TRUE or newdata is +specified. compute=TRUE is used to estimate numerical derivatives for +use in delta method approximations to the variance.

    +

    For method="io.fi" or method="trial.fi" if +integrate=FALSE, predict returns the value of the conditional +detection probability and if integrate=TRUE, it returns the average +conditional detection probability by integrating over x (distance) with +respect to a uniform distribution.

    +

    Note that the ordering of the returned results when no new data is supplied +(the "fitted" values) will not necessarily be the same as the data supplied +to ddf, the data (and hence results from predict) will +be sorted by object ID (object) then observer ID (observer).

    +
    +
    +

    Note

    +

    Each function is called by the generic function predict for the +appropriate ddf model object. They can be called directly by the +user, but it is typically safest to use predict which calls the +appropriate function based on the type of model.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.ddf.gof.html b/docs/reference/print.ddf.gof.html new file mode 100644 index 00000000..8a82d629 --- /dev/null +++ b/docs/reference/print.ddf.gof.html @@ -0,0 +1,100 @@ + +Prints results of goodness of fit tests for detection functions — print.ddf.gof • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides formatted output for results of goodness of fit tests: chi-square, +Kolmogorv-Smirnov and Cramer-von Mises test as appropriate.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ddf.gof'
    +print(x, digits = 3, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    result of call to ddf.gof

    + + +
    digits
    +

    number of digits to round chi-squared table values to

    + + +
    ...
    +

    unused unspecified arguments for generic print

    + +
    +
    +

    Value

    +

    None

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.ddf.html b/docs/reference/print.ddf.html new file mode 100644 index 00000000..04e61a21 --- /dev/null +++ b/docs/reference/print.ddf.html @@ -0,0 +1,88 @@ + +Simple pretty printer for distance sampling analyses — print.ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simply prints out summary of the model which was fitted. For more +detailed information see summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ddf'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a ddf object

    + + +
    ...
    +

    not passed through, just for S3 compatibility.

    + +
    +
    +

    Author

    +

    David L. Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.det.tables.html b/docs/reference/print.det.tables.html new file mode 100644 index 00000000..387a7811 --- /dev/null +++ b/docs/reference/print.det.tables.html @@ -0,0 +1,93 @@ + +Print results of observer detection tables — print.det.tables • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides formatted output for detection tables

    +
    + +
    +

    Usage

    +
    # S3 method for class 'det.tables'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    result of call to ddf

    + + +
    ...
    +

    unused unspecified arguments for generic print

    + +
    +
    +

    Value

    +

    None

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.dht.html b/docs/reference/print.dht.html new file mode 100644 index 00000000..7a6fd3b3 --- /dev/null +++ b/docs/reference/print.dht.html @@ -0,0 +1,108 @@ + +Prints density and abundance estimates — print.dht • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Outputs summary statistics, abundance and density by region (if any) and +optionally a correlation matrix if more than one region.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'dht'
    +print(x, cor = FALSE, bysample = FALSE, vcmatrices = FALSE, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    dht object that results from call to dht for a specific ddf object

    + + +
    cor
    +

    if TRUE outputs correlation matrix of estimates

    + + +
    bysample
    +

    if TRUE, prints results for each sample

    + + +
    vcmatrices
    +

    if TRUE, prints variance-covariance matrices

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    None

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.p_dist_table.html b/docs/reference/print.p_dist_table.html new file mode 100644 index 00000000..d56fe55c --- /dev/null +++ b/docs/reference/print.p_dist_table.html @@ -0,0 +1,93 @@ + +Print distribution of probabilities of detection — print.p_dist_table • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Just a pretty printer for the table of probabilities of detection.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'p_dist_table'
    +print(x, digits = 2, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    output from p_dist_table

    + + +
    digits
    +

    number of significant digits to print

    + + +
    ...
    +

    other arguments to be passed to print.data.frame

    + +
    +
    +

    Value

    +

    just prints the table and the range of ps

    +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.ds.html b/docs/reference/print.summary.ds.html new file mode 100644 index 00000000..26f208cc --- /dev/null +++ b/docs/reference/print.summary.ds.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.ds'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.io.fi.html b/docs/reference/print.summary.io.fi.html new file mode 100644 index 00000000..dcb8aeaa --- /dev/null +++ b/docs/reference/print.summary.io.fi.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.io.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.io.fi'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.io.html b/docs/reference/print.summary.io.html new file mode 100644 index 00000000..e02118b8 --- /dev/null +++ b/docs/reference/print.summary.io.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.io • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.io'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.rem.fi.html b/docs/reference/print.summary.rem.fi.html new file mode 100644 index 00000000..c92ba2f1 --- /dev/null +++ b/docs/reference/print.summary.rem.fi.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.rem.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.rem.fi'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.rem.html b/docs/reference/print.summary.rem.html new file mode 100644 index 00000000..73197f5a --- /dev/null +++ b/docs/reference/print.summary.rem.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.rem • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.rem'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.trial.fi.html b/docs/reference/print.summary.trial.fi.html new file mode 100644 index 00000000..c4f9da44 --- /dev/null +++ b/docs/reference/print.summary.trial.fi.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.trial.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.trial.fi'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/print.summary.trial.html b/docs/reference/print.summary.trial.html new file mode 100644 index 00000000..f04afd58 --- /dev/null +++ b/docs/reference/print.summary.trial.html @@ -0,0 +1,98 @@ + +Print summary of distance detection function model object — print.summary.trial • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error. What is printed depends +on the corresponding call to summary.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'summary.trial'
    +print(x, ...)
    +
    + +
    +

    Arguments

    + + +
    x
    +

    a summary of ddf model object

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/prob.deriv.html b/docs/reference/prob.deriv.html new file mode 100644 index 00000000..628d5dca --- /dev/null +++ b/docs/reference/prob.deriv.html @@ -0,0 +1,113 @@ + +Derivatives for variance of average p and average p(0) variance — prob.deriv • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Used in call to DeltaMethod from prob.se to get first derivatives

    +
    + +
    +

    Usage

    +
    prob.deriv(par, model, parfct, observer = NULL, fittedmodel = NULL)
    +
    + +
    +

    Arguments

    + + +
    par
    +

    detection function parameter values

    + + +
    model
    +

    ddf model object

    + + +
    parfct
    +

    function of detection probabilities; currently only +average (over covariates) detection probability p integrated over distance +or average (over covariates) detection probability at distance 0; p(0)

    + + +
    observer
    +

    1,2,3 for primary, secondary, or duplicates for average +p(0); passed to fct

    + + +
    fittedmodel
    +

    full fitted ddf model when trial.fi or +io.fi is called from trial or io respectively

    + +
    +
    +

    Value

    +

    Vector of values from fct at specified parameter values

    +
    +
    +

    Details

    +

    Need to add equations here as I do not think they exist in any of the texts. +These should probably be checked with simulation.

    +
    +
    +

    See also

    +

    prob.se

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/prob.se.html b/docs/reference/prob.se.html new file mode 100644 index 00000000..bd5486b2 --- /dev/null +++ b/docs/reference/prob.se.html @@ -0,0 +1,126 @@ + +Average p and average p(0) variance — prob.se • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes components of variance for average p=n/N and average p(0) with +weights based on empirical covariate distribution, if it contains covariates.

    +
    + +
    +

    Usage

    +
    prob.se(model, fct, vcov, observer = NULL, fittedmodel = NULL)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    ddf model object

    + + +
    fct
    +

    function of detection probabilities; currently only +average (over covariates) detection probability p integrated over distance +or average (over covariates) detection probability at distance 0; p(0)

    + + +
    vcov
    +

    variance-covariance matrix of parameter estimates

    + + +
    observer
    +

    1,2,3 for primary, secondary, or duplicates for average +p(0); passed to fct

    + + +
    fittedmodel
    +

    full fitted ddf model when trial.fi or +io.fi is called from trial or io respectively

    + +
    +
    +

    Value

    + + +
    var
    +

    variance

    +
    partial
    +

    partial derivatives of + parameters with respect to fct

    +
    covar
    +

    covariance of n and average p + or p(0)

    + +
    +
    +

    Details

    +

    Need to add equations here as I do not think they exist in any of the texts. +These should probably be checked with simulation.

    +
    +
    +

    See also

    +

    prob.deriv

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/process.data.html b/docs/reference/process.data.html new file mode 100644 index 00000000..8e5236e5 --- /dev/null +++ b/docs/reference/process.data.html @@ -0,0 +1,134 @@ + +Process data for fitting distance sampling detection function — process.data • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Sets up dataframe and does some basic error checking. Adds needed fields to +dataframe and to meta.data.

    +
    + +
    +

    Usage

    +
    process.data(data, meta.data = list(), check = TRUE)
    +
    + +
    +

    Arguments

    + + +
    data
    +

    dataframe object

    + + +
    meta.data
    +

    meta.data options; see ddf for a description

    + + +
    check
    +

    if TRUE check data for errors in the mrds structure; for +method="ds" check=FALSE

    + +
    +
    +

    Value

    + + +
    xmat
    +

    processed data.frame with added fields

    + +
    meta.data
    +

    meta.data list

    + +
    +
    +

    Details

    +

    The function does a number of error checking tasks, creating fields and +adding to meta.data including:

    +

    1) If check=TRUE, check to make sure the record structure is okay for +mrds data. The number of primary records (observer=1) must equal the number +of secondary records (observer=2). Also, a field in the dataframe is created +timesseen which counts the number of times an object was detected +0,1,2; if timesseen=0 then the record is tossed from the analysis. +Also if there are differences in the data (distance, size, covariates) for +observer 1 and 2 a warning is issued that the analysis may fail. The code +assumes these values are the same for both observers.

    +

    2) Based on the presence of fields distbegin and distend, a +determination is made of whether the data analysis should be based on binned +distances and a field binned is created, which is TRUE if the +distance for the observation is binned. By assigning for each observation +this allows an analysis of a mixture of binned and unbinned distances.

    +

    4) Data are restricted such that distances are not greater than width +and not less than left if those values are specified in +meta.data. If they are not specified then left defaults to 0 +and width defaults to the largest distance measurement.

    +

    5) Determine if an integration range (int.begin and int.end +has been specified for the observations. If it has, add the structure to +meta.data. The integration range is typically used for aerial +surveys in which the altitude varies such that the strip width (left to +width) changes with a change in altitude.

    +

    6) Fields defined as factors are cleaned up such that any unused levels are +eliminated.

    +

    7) If the restrictions placed on the data, eliminated all of the data, the +function stops with an error message

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/pronghorn.html b/docs/reference/pronghorn.html new file mode 100644 index 00000000..67f5c071 --- /dev/null +++ b/docs/reference/pronghorn.html @@ -0,0 +1,114 @@ + +Pronghorn aerial survey data from Wyoming — pronghorn • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Detections of pronghorn from fixed-wing aerial surveys in Southeastern +Wyoming using four angular bins defined by strut marks. Illustrates data +where altitude above ground level (AGL) varies during the survey.

    +
    + + +
    +

    Format

    +

    A data frame with 660 observations on the following 5 variables.

    STRATUM
    +

    a numeric vector

    + +
    direction
    +

    a factor with levels N S + representing the survey direction

    +
    AGL
    +

    height above ground + level

    +
    Band
    +

    a factor with levels A B C + D which represent angular bands between breaks at + 35.42,44.56,51.52,61.02,70.97 degrees. These angles were set based on + selected distance bins based on the target AGL.

    + +
    cluster
    +

    number of pronghorn in the observed cluster

    + +
    +
    +

    Source

    +

    Data provided courtesy of Rich Guenzel of Wyoming Game and Fish.

    +
    +
    +

    Details

    +

    Each record is an observed cluster of pronghorn. The data provide the +stratum for the observation, the direction of travel, the AGL at the time of +the observation, the angular bin which contained the center of the pronghorn +cluster(group), and the number of pronghorn in the group. The angular bins +were defined by a combination of two window and five wing strut marks to +define bin cutpoints for perpendicular ground distances of 0-65, 65-90, +90-115, 115-165 and 165-265 meters when the plane is 300' (91.4 meters) +above ground level. The inner band is considered a blind region due to +obstruction of view beneath the plane; thus th the line is offset 65 meters +from underneath the plane.

    +
    +
    +

    References

    +

    Laake, J., R. J. Guenzel, J. L. Bengtson, P. Boveng, M. Cameron, + and M. B. Hanson. 2008. Coping with variation in aerial survey protocol + for line-transect sampling. Wildlife Research 35:289-298.

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ptdata.distance-1.png b/docs/reference/ptdata.distance-1.png new file mode 100644 index 00000000..f20f07eb Binary files /dev/null and b/docs/reference/ptdata.distance-1.png differ diff --git a/docs/reference/ptdata.distance-2.png b/docs/reference/ptdata.distance-2.png new file mode 100644 index 00000000..fb1c0746 Binary files /dev/null and b/docs/reference/ptdata.distance-2.png differ diff --git a/docs/reference/ptdata.distance.html b/docs/reference/ptdata.distance.html new file mode 100644 index 00000000..0afa70a2 --- /dev/null +++ b/docs/reference/ptdata.distance.html @@ -0,0 +1,149 @@ + +Single observer point count data example from Distance — ptdata.distance • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Single observer point count data example from Distance

    +
    + + +
    +

    Format

    +

    The format is 144 obs of 6 variables: + distance: numeric distance from center + observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... + detected: numeric 0/1 + object: sequential object number + Sample.Label: point label + Region.Label: single region label

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(ptdata.distance)
    +xx <- ddf(dsmodel = ~cds(key="hn", formula = ~1), data = ptdata.distance,
    +          method = "ds", meta.data = list(point=TRUE))
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(xx)
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  144 
    +#> Distance range         :  0  -  34.16 
    +#> AIC                    :  919.1403 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate         se
    +#> (Intercept) 2.283007 0.04523359
    +#> 
    +#>                        Estimate           SE         CV
    +#> Average p             0.1644301   0.01466592 0.08919244
    +#> N in covered region 875.7520203 102.72037375 0.11729390
    +#> EDR                  13.8518741   0.61774122 0.04459622
    +plot(xx,main="Distance point count data")
    +
    +ddf.gof(xx)
    +
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#>           [0,2.85] (2.85,5.69] (5.69,8.54] (8.54,11.4] (11.4,14.2] (14.2,17.1]
    +#> Observed     5.000      19.000      16.000      25.000      28.000      23.000
    +#> Expected     5.955      16.432      23.166      25.232      23.213      18.671
    +#> Chisquare    0.153       0.401       2.217       0.002       0.987       1.004
    +#>           (17.1,19.9] (19.9,22.8] (22.8,25.6] (25.6,28.5] (28.5,31.3]
    +#> Observed       14.000       5.000       5.000       3.000       0.000
    +#> Expected       13.356       8.578       4.978       2.620       1.254
    +#> Chisquare       0.031       1.493       0.000       0.055       1.254
    +#>           (31.3,34.2]   Total
    +#> Observed        1.000 144.000
    +#> Expected        0.547 144.000
    +#> Chisquare       0.375   7.973
    +#> 
    +#> P = 0.6315 with 10 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.0954697 p-value = 0.607543
    +Regions <- data.frame(Region.Label=1,Area=1)
    +Samples <- data.frame(Sample.Label=1:30,
    +                      Region.Label=rep(1,30),
    +                      Effort=rep(1,30))
    +print(dht(xx,sample.table=Samples,region.table=Regions))
    +#> Abundance and density estimates from distance sampling
    +#> Variance       : P2, N/L 
    +#> 
    +#> Summary statistics
    +#> 
    +#>   Region Area CoveredArea Effort   n  k  ER     se.ER      cv.ER
    +#> 1      1    1    109978.3     30 144 30 4.8 0.4245349 0.08844477
    +#> 
    +#> Abundance:
    +#>   Region    Estimate          se        cv         lcl        ucl       df
    +#> 1  Total 0.007962956 0.001000224 0.1256096 0.006212055 0.01020736 97.52316
    +#> 
    +#> Density:
    +#>   Region    Estimate          se        cv         lcl        ucl       df
    +#> 1  Total 0.007962956 0.001000224 0.1256096 0.006212055 0.01020736 97.52316
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ptdata.dual-1.png b/docs/reference/ptdata.dual-1.png new file mode 100644 index 00000000..444d347e Binary files /dev/null and b/docs/reference/ptdata.dual-1.png differ diff --git a/docs/reference/ptdata.dual-2.png b/docs/reference/ptdata.dual-2.png new file mode 100644 index 00000000..cd240e28 Binary files /dev/null and b/docs/reference/ptdata.dual-2.png differ diff --git a/docs/reference/ptdata.dual-3.png b/docs/reference/ptdata.dual-3.png new file mode 100644 index 00000000..884cf2ab Binary files /dev/null and b/docs/reference/ptdata.dual-3.png differ diff --git a/docs/reference/ptdata.dual-4.png b/docs/reference/ptdata.dual-4.png new file mode 100644 index 00000000..f206715e Binary files /dev/null and b/docs/reference/ptdata.dual-4.png differ diff --git a/docs/reference/ptdata.dual-5.png b/docs/reference/ptdata.dual-5.png new file mode 100644 index 00000000..338b0402 Binary files /dev/null and b/docs/reference/ptdata.dual-5.png differ diff --git a/docs/reference/ptdata.dual-6.png b/docs/reference/ptdata.dual-6.png new file mode 100644 index 00000000..cdcf2157 Binary files /dev/null and b/docs/reference/ptdata.dual-6.png differ diff --git a/docs/reference/ptdata.dual.html b/docs/reference/ptdata.dual.html new file mode 100644 index 00000000..d79b2faa --- /dev/null +++ b/docs/reference/ptdata.dual.html @@ -0,0 +1,141 @@ + +Simulated dual observer point count data — ptdata.dual • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simulated dual observer point count data with detection p(0)=0.8; +hn sigma=30; w=100 for both observers with dependency y>0, gamma=0.1

    +
    + + +
    +

    Format

    +

    The format is 420 obs of 6 variables: +distance: numeric distance from center +observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... +detected: numeric 0/1 +person: Factor with 2 levels A,B +pair: Factor with 2 levels "AB" BA" $ +object : sequential object number

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(ptdata.dual)
    +xx <- ddf(mrmodel=~glm(formula=~distance),
    +          dsmodel = ~cds(key="hn", formula = ~1),
    +          data = ptdata.dual, method = "io", meta.data = list(point=TRUE))
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(xx)
    +#> 
    +#> Summary for io.fi object 
    +#> Number of observations   :  210 
    +#> Number seen by primary   :  199 
    +#> Number seen by secondary :  193 
    +#> Number seen by both      :  182 
    +#> AIC                      :  192.4567 
    +#> 
    +#> 
    +#> Conditional detection function parameters:
    +#>               estimate         se
    +#> (Intercept) 1.06437933 0.41946692
    +#> distance    0.04904523 0.01408653
    +#> 
    +#>                         Estimate         SE         CV
    +#> Average primary p(0)   0.7435266 0.07999017 0.10758213
    +#> Average secondary p(0) 0.7435266 0.07999017 0.10758213
    +#> Average combined p(0)  0.9342214 0.04103071 0.04391969
    +#> 
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  210 
    +#> Distance range         :  0  -  96.32036 
    +#> AIC                    :  1817.79 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate         se
    +#> (Intercept)  3.38454 0.03661838
    +#> 
    +#>             Estimate         SE         CV
    +#> Average p  0.1867483 0.01332166 0.07133485
    +#> EDR       41.6242555 1.48462997 0.03566742
    +#> 
    +#> 
    +#> Summary for io object
    +#> Total AIC value :  2010.247 
    +#> 
    +#>                         Estimate           SE         CV
    +#> Average p              0.1744643   0.01461507 0.08377111
    +#> N in covered region 1203.6847617 125.94892721 0.10463614
    +plot(xx,main="Simulated point count data")
    +
    +
    +
    +
    +
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ptdata.removal-1.png b/docs/reference/ptdata.removal-1.png new file mode 100644 index 00000000..31658aa9 Binary files /dev/null and b/docs/reference/ptdata.removal-1.png differ diff --git a/docs/reference/ptdata.removal-2.png b/docs/reference/ptdata.removal-2.png new file mode 100644 index 00000000..c1be6ffe Binary files /dev/null and b/docs/reference/ptdata.removal-2.png differ diff --git a/docs/reference/ptdata.removal-3.png b/docs/reference/ptdata.removal-3.png new file mode 100644 index 00000000..f5b18336 Binary files /dev/null and b/docs/reference/ptdata.removal-3.png differ diff --git a/docs/reference/ptdata.removal.html b/docs/reference/ptdata.removal.html new file mode 100644 index 00000000..0d422ced --- /dev/null +++ b/docs/reference/ptdata.removal.html @@ -0,0 +1,137 @@ + +Simulated removal observer point count data — ptdata.removal • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simulated removal observer point count data with detection p(0)=0.8; +hn sigma=30; w=100 for both observers with dependency y>0, gamma=0.1

    +
    + + +
    +

    Format

    +

    The format is 408 obs of 6 variables: + distance: numeric distance from center + observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... + detected: numeric 0/1 + person: Factor with 2 levels A,B + pair: Factor with 2 levels "AB" BA" + object: sequential object number

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(ptdata.removal)
    +xx <- ddf(mrmodel=~glm(formula=~distance),
    +          dsmodel = ~cds(key="hn", formula = ~1),
    +          data = ptdata.removal, method = "rem",
    +          meta.data = list(point=TRUE))
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(xx)
    +#> 
    +#> Summary for rem.fi object 
    +#> Number of observations               :  204 
    +#> Number seen by primary               :  195 
    +#> Number additional seen by secondary  :  9 
    +#> AIC                                  :  69.33598 
    +#> 
    +#> 
    +#> Conditional detection function parameters:
    +#>               estimate        se
    +#> (Intercept) 1.19813958 0.7821458
    +#> distance    0.07245812 0.0327875
    +#> 
    +#>                       Estimate         SE         CV
    +#> Average primary p(0) 0.9462658 0.06457123 0.06823794
    +#> 
    +#> 
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  204 
    +#> Distance range         :  0  -  83.04828 
    +#> AIC                    :  1744.474 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate        se
    +#> (Intercept) 3.366348 0.0383046
    +#> 
    +#>             Estimate         SE         CV
    +#> Average p  0.2394111 0.01708192 0.07134975
    +#> EDR       40.6352360 1.44965694 0.03567487
    +#> 
    +#> 
    +#> Summary for rem object
    +#> 
    +#> Total AIC value =  1813.81 
    +#>                        Estimate           SE         CV
    +#> Average p             0.2265465   0.02236647 0.09872793
    +#> N in covered region 900.4772670 104.77563511 0.11635567
    +plot(xx,main="Simulated point count data")
    +
    +
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/ptdata.single-1.png b/docs/reference/ptdata.single-1.png new file mode 100644 index 00000000..ebf301f0 Binary files /dev/null and b/docs/reference/ptdata.single-1.png differ diff --git a/docs/reference/ptdata.single.html b/docs/reference/ptdata.single.html new file mode 100644 index 00000000..2ddd7834 --- /dev/null +++ b/docs/reference/ptdata.single.html @@ -0,0 +1,106 @@ + +Simulated single observer point count data — ptdata.single • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simulated single observer point count data with detection p(0)=1; +hn sigma=30; w=100

    +
    + + +
    +

    Format

    +

    The format is 341 obs of 4 variables: ..$ + distance: numeric distance from center $ + observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... ..$ + detected: numeric 0/1 $ object : sequential object number

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(ptdata.single)
    +xx=ddf(dsmodel = ~cds(key="hn", formula = ~1), data = ptdata.single,
    +         method = "ds", meta.data = list(point=TRUE))
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(xx)
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  341 
    +#> Distance range         :  0  -  95.62823 
    +#> AIC                    :  2928.884 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate         se
    +#> (Intercept) 3.397033 0.02984984
    +#> 
    +#>                         Estimate          SE         CV
    +#> Average p              0.1940384   0.0112283 0.05786639
    +#> N in covered region 1757.3842381 132.8196911 0.07557806
    +#> EDR                   42.1240314   1.2187829 0.02893320
    +plot(xx,main="Simulated point count data")
    +
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/qqplot.ddf.html b/docs/reference/qqplot.ddf.html new file mode 100644 index 00000000..19c6ea8a --- /dev/null +++ b/docs/reference/qqplot.ddf.html @@ -0,0 +1,163 @@ + +Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Constructs a quantile-quantile (Q-Q) plot for fitted model as a graphical +check of goodness of fit. Formal goodness of fit testing for detection +function models using Kolmogorov-Smirnov and Cramer-von Mises tests. Both +tests are based on looking at the quantile-quantile plot produced by +qqplot.ddf and deviations from the line x=y.

    +
    + +
    +

    Usage

    +
    qqplot.ddf(model, plot = TRUE, nboot = 100, ks = FALSE, ...)
    +
    + +
    +

    Arguments

    + + +
    model
    +

    fitted distance detection function model object

    + + +
    plot
    +

    the Q-Q plot be plotted or just report statistics?

    + + +
    nboot
    +

    number of replicates to use to calculate p-values for the +goodness of fit test statistics

    + + +
    ks
    +

    perform the Kolmogorov-Smirnov test (this involves many bootstraps +so can take a while)

    + + +
    ...
    +

    additional arguments passed to plot

    + +
    +
    +

    Value

    +

    A list of goodness of fit related values:

    +
    edf
    +

    matrix of lower + and upper empirical distribution function values

    +
    cdf
    +

    fitted + cumulative distribution function values

    +
    ks
    +

    list with K-S statistic + (Dn) and p-value (p)

    +
    CvM
    +

    list with CvM statistic + (W) and p-value (p)

    + +
    +
    +

    Details

    +

    The Kolmogorov-Smirnov test asks the question "what's the largest vertical +distance between a point and the y=x line?" It uses this distance as a +statistic to test the null hypothesis that the samples (EDF and CDF in our +case) are from the same distribution (and hence our model fits well). If the +deviation between the y=x line and the points is too large we reject the +null hypothesis and say the model doesn't have a good fit.

    +

    Rather than looking at the single biggest difference between the y=x line +and the points in the Q-Q plot, we might prefer to think about all the +differences between line and points, since there may be many smaller +differences that we want to take into account rather than looking for one +large deviation. Its null hypothesis is the same, but the statistic it uses +is the sum of the deviations from each of the point to the line.

    +
    +
    +

    Details

    + + +

    Note that a bootstrap procedure is required to ensure that the p-values from +the procedure are correct as the we are comparing the cumulative +distribution function (CDF) and empirical distribution function (EDF) and we +have estimated the parameters of the detection function.

    +
    +
    +

    References

    +

    Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. + Marques, J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance + sampling. pp: 385-389. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/rem.glm.html b/docs/reference/rem.glm.html new file mode 100644 index 00000000..08569de9 --- /dev/null +++ b/docs/reference/rem.glm.html @@ -0,0 +1,168 @@ + +Iterative offset model fitting of mark-recapture with removal model — rem.glm • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Detection function fitting from mark-recapture data with a removal +configuration in which a secondary observer knows what the primary observer +detects and detects objects missed by the primary observer. The iterative +offset glm/gam uses an offset to compensate for the conditioning on the set +of objects seen by either observer (eg 00 those missed by both observers are +not included in the analysis. This function is similar to +io.glm.

    +
    + +
    +

    Usage

    +
    rem.glm(
    +  datavec,
    +  fitformula,
    +  eps = 1e-05,
    +  iterlimit = 500,
    +  GAM = FALSE,
    +  gamplot = TRUE,
    +  datavec2
    +)
    +
    + +
    +

    Arguments

    + + +
    datavec
    +

    dataframe containing records seen by either observer 1 or 2

    + + +
    fitformula
    +

    logit link formula

    + + +
    eps
    +

    convergence criterion

    + + +
    iterlimit
    +

    maximum number of iterations allowed

    + + +
    GAM
    +

    uses GAM instead of GLM for fitting

    + + +
    gamplot
    +

    set to TRUE to get a gam plot object if GAM=TRUE

    + + +
    datavec2
    +

    dataframe containing all records for observer 1 and observer +2 as in io.glm form; this is used in case there is an observer(not +platform effect)

    + +
    +
    +

    Value

    +

    list of class("remglm","glm","lm") or class("remglm","gam")

    +
    glmobj
    +

    GLM or GAM object

    +
    offsetvalue
    +

    offsetvalues from + iterative fit

    +
    plotobj
    +

    gam plot object (if GAM & gamplot==TRUE, + else NULL)

    + +
    +
    +

    Details

    +

    The only difference between this function and io.glm is the +offset and the data construction because there is only one detection +function being estimated for the primary observer. The two functions could +be merged.

    +
    +
    +

    Note

    +

    currently the code in this function for GAMs has been commented out + until the remainder of the mrds package will work with GAMs.

    +
    +
    +

    References

    +

    Buckland, S.T., J.M. breiwick, K.L. Cattanach, and J.L. Laake. + 1993. Estimated population size of the California gray whale. Marine + Mammal Science, 9:235-249.

    +

    Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. Marques, + J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance sampling. + pp: 360-363. In: Advanced Distance Sampling, eds. S.T. Buckland, + D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. + Oxford University Press.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/rescale_pars.html b/docs/reference/rescale_pars.html new file mode 100644 index 00000000..113b972f --- /dev/null +++ b/docs/reference/rescale_pars.html @@ -0,0 +1,97 @@ + +Calculate the parameter rescaling for parameters associated with covariates — rescale_pars • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This will calculate the rescaling needed when covariates to be included in +the scale of the detection function are "too big". Based on code from +optimx.

    +
    + +
    +

    Usage

    +
    rescale_pars(initialvalues, ddfobj)
    +
    + +
    +

    Arguments

    + + +
    initialvalues
    +

    starting values for the optimisation

    + + +
    ddfobj
    +

    detection function object

    + +
    +
    +

    Details

    +

    Derivative-free methods like nlminb are sensitive to the parameters being +poorly scaled. This can also cause problems for quasi-Newton methods too (at +least, bad scaling won't _help_ the optimisation). So here we rescale the +parameters if necessary (unless we already got scaling from control)

    +
    +
    +

    Author

    +

    David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/sample_ddf.html b/docs/reference/sample_ddf.html new file mode 100644 index 00000000..129dd0a1 --- /dev/null +++ b/docs/reference/sample_ddf.html @@ -0,0 +1,87 @@ + +Generate data from a fitted detection function and refit the model — sample_ddf • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Generate data from a fitted detection function and refit the model

    +
    + +
    +

    Usage

    +
    sample_ddf(ds.object)
    +
    + +
    +

    Arguments

    + + +
    ds.object
    +

    a fitted detection function object

    + +
    +
    +

    Note

    +

    This function changes the random number generator seed. To avoid any +potential side-effects, use something like: seed <- +get(".Random.seed",envir=.GlobalEnv) before running code and +assign(".Random.seed",seed,envir=.GlobalEnv) after.

    +
    +
    +

    Author

    +

    David L. Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/setbounds.html b/docs/reference/setbounds.html new file mode 100644 index 00000000..fdccf1a1 --- /dev/null +++ b/docs/reference/setbounds.html @@ -0,0 +1,119 @@ + +Set parameter bounds — setbounds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Set values of lower and upper bounds and check lengths of any user-specified +values

    +
    + +
    +

    Usage

    +
    setbounds(lowerbounds, upperbounds, initialvalues, ddfobj, width, left)
    +
    + +
    +

    Arguments

    + + +
    lowerbounds
    +

    vector of lower bounds

    + + +
    upperbounds
    +

    vector of upper bounds

    + + +
    initialvalues
    +

    vector of initial parameter estimates

    + + +
    ddfobj
    +

    distance detection function object

    + + +
    width
    +

    truncation distance

    + + +
    left
    +

    left truncation distance

    + +
    +
    +

    Value

    + + +
    lower
    +

    vector of lower bounds

    +
    upper
    +

    vector of upper + bounds

    +
    setlower
    +

    logical indicating whether user set lower bounds

    + +
    setupper
    +

    logical indicating whether user set upper bounds

    + +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/setcov.html b/docs/reference/setcov.html new file mode 100644 index 00000000..2a287bdd --- /dev/null +++ b/docs/reference/setcov.html @@ -0,0 +1,118 @@ + +Creates design matrix for covariates in detection function — setcov • mrds + Skip to contents + + +
    +
    +
    + +
    +

    This function creates a design matrix for the g(0) or scale covariates using +the input model formula. It returns a list which contains 2 elements: 1) +dim: the dimension (number of columns) of the design matrix, and 2) cov: the +constructed design matrix. This function is relatively simple because it +uses the built-in function model.matrix which does the +majority of the work. This function handles 2 exceptions "~.", the null +model with 0 columns and "~1" the intercept only model - a column of 1s. If +a model other than the 2 exceptions is provided, it calls +model.matrix to construct the columns. If any of the columns of +the design matrix are all 0's the column is removed. This occurs when there +is no data for a particular factor.

    +
    + +
    +

    Usage

    +
    setcov(dmat, model)
    +
    + +
    +

    Arguments

    + + +
    dmat
    +

    data matrix

    + + +
    model
    +

    model formula

    + +
    +
    +

    Value

    +

    a design matrix for the specified data and model

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/setinitial.ds.html b/docs/reference/setinitial.ds.html new file mode 100644 index 00000000..87e28ff0 --- /dev/null +++ b/docs/reference/setinitial.ds.html @@ -0,0 +1,125 @@ + +Set initial values for detection function based on distance sampling — setinitial.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    For a given detection function, it computes the initial values for the +parameters including scale and shape parameters and adjustment function +parameters if any. If there are user-defined initial values only the +parameters not specified by the user are computed.

    +
    + +
    +

    Usage

    +
    setinitial.ds(ddfobj, width, initial, point, left)
    +       sethazard(ddfobj, dmat, width, left, point)
    +
    + +
    +

    Arguments

    + + +
    ddfobj
    +

    distance detection function object

    + + +
    width
    +

    half-width of transect or radius of point count

    + + +
    initial
    +

    list of user-defined initial values with possible elements: +scale, shape, adjustment

    + + +
    point
    +

    if TRUE, point count data; otherwise, line transect data

    + + +
    left
    +

    left truncation

    + + +
    dmat
    +

    xmat from ddfobj

    + +
    +
    +

    Value

    + + +
    scale
    +

    vector of initial scale parameter values

    + +
    shape
    +

    vector of initial shape parameter values

    + +
    adjustment
    +

    vector of initial adjustment function parameter values

    + +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/sim.mix.html b/docs/reference/sim.mix.html new file mode 100644 index 00000000..285dbda9 --- /dev/null +++ b/docs/reference/sim.mix.html @@ -0,0 +1,111 @@ + +Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Simulation of distance sampling data via mixture models +Allows one to simulate line transect distance sampling data using +a mixture of half-normal detection functions.

    +
    + +
    +

    Usage

    +
    sim.mix(n, sigma, mix.prop, width, means = 0)
    +
    + +
    +

    Arguments

    + + +
    n
    +

    number of samples to generate

    + + +
    sigma
    +

    vector of scale parameters

    + + +
    mix.prop
    +

    vector of mixture proportions (same length as sigma)

    + + +
    width
    +

    truncation

    + + +
    means
    +

    vector of means (used to generate wacky, non-monotonic data)

    + +
    +
    +

    Value

    +

    distances a vector of distances

    +
    +
    +

    Note

    +

    At the moment this is TOTALLY UNSUPPORTED! + Please don't use it for anything important!

    +
    +
    +

    Author

    +

    David Lawrence Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/solvecov.html b/docs/reference/solvecov.html new file mode 100644 index 00000000..cf9c0069 --- /dev/null +++ b/docs/reference/solvecov.html @@ -0,0 +1,109 @@ + +Invert of covariance matrices — solvecov • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Tries to invert a matrix by solve. If this fails because of +singularity, an eigenvector decomposition is computed, and eigenvalues below +1/cmax are replaced by 1/cmax, i.e., cmax will be the +corresponding eigenvalue of the inverted matrix.

    +
    + +
    +

    Usage

    +
    solvecov(m, cmax = 1e+10)
    +
    + +
    +

    Arguments

    + + +
    m
    +

    a numeric symmetric matrix.

    + + +
    cmax
    +

    a positive value, see above.

    + +
    +
    +

    Value

    +

    A list with the following components: inv the inverted +matrix, coll TRUE if solve failed because of +singularity.

    +
    +
    +

    Source

    + + +

    solvecov code was taken from package fpc: Christian Hennig

    +
    +
    +

    See also

    +

    solve, eigen

    +
    +
    +

    Author

    +

    Christian Hennig

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/stake77-1.png b/docs/reference/stake77-1.png new file mode 100644 index 00000000..0bbc984b Binary files /dev/null and b/docs/reference/stake77-1.png differ diff --git a/docs/reference/stake77-2.png b/docs/reference/stake77-2.png new file mode 100644 index 00000000..2dd37c21 Binary files /dev/null and b/docs/reference/stake77-2.png differ diff --git a/docs/reference/stake77-3.png b/docs/reference/stake77-3.png new file mode 100644 index 00000000..78e0599c Binary files /dev/null and b/docs/reference/stake77-3.png differ diff --git a/docs/reference/stake77.html b/docs/reference/stake77.html new file mode 100644 index 00000000..86a00929 --- /dev/null +++ b/docs/reference/stake77.html @@ -0,0 +1,295 @@ + +Wooden stake data from 1977 survey — stake77 • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Multiple surveys by different observers of a single 1km transect containing +150 wooden stakes placed randomly throughout a 40 m strip (20m on either +side).

    +
    + + +
    +

    Format

    +

    A data frame with 150 observations on the following 10 variables.

    StakeNo
    +

    unique number for each stake 1-150

    + +
    PD
    +

    perpendicular distance at which the stake was placed + from the line

    +
    Obs1
    +

    0/1 whether missed/seen by observer 1

    + +
    Obs2
    +

    0/1 whether missed/seen by observer 2

    + +
    Obs3
    +

    0/1 whether missed/seen by observer 3

    + +
    Obs4
    +

    0/1 whether missed/seen by observer 4

    + +
    Obs5
    +

    0/1 whether missed/seen by observer 5

    + +
    Obs6
    +

    0/1 whether missed/seen by observer 6

    + +
    Obs7
    +

    0/1 whether missed/seen by observer 7

    + +
    Obs8
    +

    0/1 whether missed/seen by observer 8

    + +
    +
    +

    Source

    +

    Laake, J. 1978. Line transect estimators robust to animal movement. + M.S. Thesis. Utah State University, Logan, Utah. 55p.

    +
    +
    +

    References

    +

    Burnham, K. P., D. R. Anderson, and J. L. Laake. 1980. + Estimation of Density from Line Transect Sampling of Biological + Populations. Wildlife Monographs:7-202.

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(stake77)
    +# Extract functions for stake data and put in the mrds format
    +extract.stake <- function(stake,obs){
    +  extract.obs <- function(obs){
    +    example <- subset(stake,eval(parse(text=paste("Obs",obs,"==1",sep=""))),
    +                      select="PD")
    +    example$distance <- example$PD
    +    example$object <- 1:nrow(example)
    +    example$PD <- NULL
    +    return(example)
    +  }
    +  if(obs!="all"){
    +    return(extract.obs(obs=obs))
    +  }else{
    +    example <- NULL
    +    for(i in 1:(ncol(stake)-2)){
    +      df <- extract.obs(obs=i)
    +      df$person <- i
    +      example <- rbind(example,df)
    +    }
    +    example$person <- factor(example$person)
    +    example$object <- 1:nrow(example)
    +    return(example)
    +  }
    +}
    +extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){
    +  obs1 <- paste("Obs",obs1,sep="")
    +  obs2 <- paste("Obs",obs2,sep="")
    +  example <- subset(stake,eval(parse(text=paste(obs1,"==1 |",obs2,"==1 ",
    +                                       sep=""))),select=c("PD",obs1,obs2))
    +  names(example) <- c("distance","obs1","obs2")
    +  detected <- c(example$obs1,example$obs2)
    +  example <- data.frame(object   = rep(1:nrow(example),2),
    +                        distance = rep(example$distance,2),
    +                        detected = detected,
    +                        observer = c(rep(1,nrow(example)),
    +                                     rep(2,nrow(example))))
    +  if(removal) example$detected[example$observer==2] <- 1
    +  return(example)
    +}
    +# extract data for observer 1 and fit a single observer model
    +stakes <- extract.stake(stake77,1)
    +ds.model <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1), data = stakes,
    +                method = "ds", meta.data = list(width = 20))
    +plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE)
    +
    +ddf.gof(ds.model)
    +
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#>           [0,2.22] (2.22,4.44] (4.44,6.67] (6.67,8.89] (8.89,11.1] (11.1,13.3]
    +#> Observed    13.000      17.000      14.000      12.000      11.000       5.000
    +#> Expected    16.023      15.107      13.430      11.256       8.894       6.627
    +#> Chisquare    0.570       0.237       0.024       0.049       0.498       0.399
    +#>           (13.3,15.6] (15.6,17.8] (17.8,20] Total
    +#> Observed        3.000       3.000     3.000 81.00
    +#> Expected        4.655       3.083     1.925 81.00
    +#> Chisquare       0.588       0.002     0.600  2.97
    +#> 
    +#> P = 0.8878 with 7 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.051489 p-value = 0.867184
    +
    +# extract data from observers 1 and 3 and fit an io model
    +stkpairs <- extract.stake.pairs(stake77,1,3,removal=FALSE)
    +io.model <- ddf(dsmodel = ~mcds(key = "hn", formula=~1),
    +                mrmodel=~glm(formula=~distance),
    +                data = stkpairs, method = "io")
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(io.model)
    +#> 
    +#> Summary for io.fi object 
    +#> Number of observations   :  89 
    +#> Number seen by primary   :  81 
    +#> Number seen by secondary :  68 
    +#> Number seen by both      :  60 
    +#> AIC                      :  137.046 
    +#> 
    +#> 
    +#> Conditional detection function parameters:
    +#>              estimate         se
    +#> (Intercept)  3.105418 0.52079895
    +#> distance    -0.228405 0.05957038
    +#> 
    +#>                         Estimate          SE          CV
    +#> Average primary p(0)   0.9571157 0.021376325 0.022334108
    +#> Average secondary p(0) 0.9571157 0.021376325 0.022334108
    +#> Average combined p(0)  0.9981609 0.001833418 0.001836796
    +#> 
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  89 
    +#> Distance range         :  0  -  19.39 
    +#> AIC                    :  504.1853 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate        se
    +#> (Intercept) 2.233369 0.1031155
    +#> 
    +#>            Estimate         SE         CV
    +#> Average p 0.5803993 0.04794403 0.08260525
    +#> 
    +#> 
    +#> Summary for io object
    +#> Total AIC value :  641.2313 
    +#> 
    +#>                        Estimate          SE         CV
    +#> Average p             0.5793319  0.04786769 0.08262567
    +#> N in covered region 153.6252334 16.51282572 0.10748772
    +par(mfrow=c(3,2))
    +plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE)
    +
    +dev.new()
    +ddf.gof(io.model)
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#> 
    +#> Distance sampling component:
    +#>           [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5]
    +#> Observed    17.000      21.000      16.000     14.000      9.000       4.000
    +#> Expected    18.954      17.725      15.499     12.673      9.690       6.929
    +#> Chisquare    0.202       0.605       0.016      0.139      0.049       1.238
    +#>           (14.5,17] (17,19.4]  Total
    +#> Observed      4.000     4.000 89.000
    +#> Expected      4.633     2.897 89.000
    +#> Chisquare     0.086     0.420  2.756
    +#> 
    +#> P = 0.8388 with 6 degrees of freedom
    +#> 
    +#> Mark-recapture component:
    +#> Capture History 10
    +#>           [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5]
    +#> Observed         2           0           1          3          6           3
    +#> Expected         1           2           2          3          2           1
    +#> Chisquare        1           2           1          0          6           2
    +#>           (14.5,17] (17,19.4] Total
    +#> Observed          4         2    21
    +#> Expected          2         2    14
    +#> Chisquare         4         0    16
    +#> Capture History 01
    +#>           [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5]
    +#> Observed         3           1           2          1          0           0
    +#> Expected         1           2           2          3          2           1
    +#> Chisquare        5           0           0          1          2           1
    +#>           (14.5,17] (17,19.4] Total
    +#> Observed          0         1     8
    +#> Expected          2         2    14
    +#> Chisquare         2         0    12
    +#> Capture History 11
    +#>           [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5]
    +#> Observed        12          20          13         10          3           1
    +#> Expected        15          17          12          9          4           1
    +#> Chisquare        1           0           0          0          0           0
    +#>           (14.5,17] (17,19.4] Total
    +#> Observed          0         1    60
    +#> Expected          1         1    60
    +#> Chisquare         1         0     3
    +#> 
    +#> MR total chi-square = 31.176  P = 0.0052374 with 14 degrees of freedom
    +#> 
    +#> 
    +#> Total chi-square = 33.932  P = 0.026589 with 20 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.0468697 p-value = 0.895003
    +# }
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/stake78-1.png b/docs/reference/stake78-1.png new file mode 100644 index 00000000..12fb916c Binary files /dev/null and b/docs/reference/stake78-1.png differ diff --git a/docs/reference/stake78-2.png b/docs/reference/stake78-2.png new file mode 100644 index 00000000..35950ef1 Binary files /dev/null and b/docs/reference/stake78-2.png differ diff --git a/docs/reference/stake78-3.png b/docs/reference/stake78-3.png new file mode 100644 index 00000000..8f7e7f57 Binary files /dev/null and b/docs/reference/stake78-3.png differ diff --git a/docs/reference/stake78-4.png b/docs/reference/stake78-4.png new file mode 100644 index 00000000..ba87fb3b Binary files /dev/null and b/docs/reference/stake78-4.png differ diff --git a/docs/reference/stake78-5.png b/docs/reference/stake78-5.png new file mode 100644 index 00000000..8ecd70d5 Binary files /dev/null and b/docs/reference/stake78-5.png differ diff --git a/docs/reference/stake78-6.png b/docs/reference/stake78-6.png new file mode 100644 index 00000000..e6e7c512 Binary files /dev/null and b/docs/reference/stake78-6.png differ diff --git a/docs/reference/stake78.html b/docs/reference/stake78.html new file mode 100644 index 00000000..84047942 --- /dev/null +++ b/docs/reference/stake78.html @@ -0,0 +1,316 @@ + +Wooden stake data from 1978 survey — stake78 • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Multiple surveys by different observers of a single 1km transect containing +150 wooden stakes placed based on expected uniform distribution throughout a +40 m strip (20m on either side).

    +
    + + +
    +

    Format

    +

    A data frame with 150 observations on the following 13 variables.

    StakeNo
    +

    unique number for each stake 1-150

    + +
    PD
    +

    perpendicular distance at which the stake was placed + from the line

    +
    Obs1
    +

    0/1 whether missed/seen by observer 1

    + +
    Obs2
    +

    0/1 whether missed/seen by observer 2

    + +
    Obs3
    +

    0/1 whether missed/seen by observer 3

    + +
    Obs4
    +

    0/1 whether missed/seen by observer 4

    + +
    Obs5
    +

    0/1 whether missed/seen by observer 5

    + +
    Obs6
    +

    0/1 whether missed/seen by observer 6

    + +
    Obs7
    +

    0/1 whether missed/seen by observer 7

    + +
    Obs8
    +

    0/1 whether missed/seen by observer 8

    + +
    Obs9
    +

    0/1 whether missed/seen by observer 9

    + +
    Obs10
    +

    0/1 whether missed/seen by observer 10

    + +
    Obs11
    +

    0/1 whether missed/seen by observer 11

    + +
    +
    +

    Source

    +

    Laake, J. 1978. Line transect estimators robust to animal movement. + M.S. Thesis. Utah State University, Logan, Utah. 55p.

    +
    +
    +

    Details

    +

    The 1997 survey was based on a single realization of a uniform distribution. +Because it was a single transect and there was no randomization of the +distances for each survey, we repeated the experiment and used distances +that provided a uniform distribution but randomly sorted the positions along +the line so there was no pattern obvious to the observer.

    +
    +
    +

    References

    +

    Burnham, K. P., D. R. Anderson, and J. L. Laake. 1980. + Estimation of Density from Line Transect Sampling of Biological + Populations. Wildlife Monographs:7-202.

    +
    + +
    +

    Examples

    +
    # \donttest{
    +data(stake78)
    +data(stake77)
    +# compare distribution of distances for all stakes
    +hist(stake77$PD)
    +
    +hist(stake78$PD)
    +
    +# Extract stake data and put in the mrds format for model fitting.
    +extract.stake <- function(stake,obs){
    +  extract.obs <- function(obs){
    +    example <- subset(stake,eval(parse(text=paste("Obs",obs,"==1",sep=""))),
    +                      select="PD")
    +    example$distance <- example$PD
    +    example$object <- 1:nrow(example)
    +    example$PD <- NULL
    +    return(example)
    +  }
    +  if(obs!="all"){
    +     return(extract.obs(obs=obs))
    +  }else{
    +    example <- NULL
    +    for(i in 1:(ncol(stake)-2)){
    +      df <- extract.obs(obs=i)
    +      df$person <- i
    +      example <- rbind(example,df)
    +    }
    +    example$person <- factor(example$person)
    +    example$object <- 1:nrow(example)
    +    return(example)
    +  }
    +}
    +extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){
    +  obs1 <- paste("Obs",obs1,sep="")
    +  obs2 <- paste("Obs",obs2,sep="")
    +  example <- subset(stake,eval(parse(text=paste(obs1,"==1 |",obs2,"==1 ",
    +                                     sep=""))), select=c("PD",obs1,obs2))
    +  names(example) <- c("distance","obs1","obs2")
    +  detected <- c(example$obs1,example$obs2)
    +  example <- data.frame(object=rep(1:nrow(example),2),
    +                        distance=rep(example$distance,2),
    +                        detected = detected,
    +                        observer=c(rep(1,nrow(example)),
    +                                   rep(2,nrow(example))))
    +  if(removal) example$detected[example$observer==2] <- 1
    +  return(example)
    +}
    +
    +# extract data for observer 10 and fit a single observer model
    +stakes <- extract.stake(stake78,10)
    +ds.model <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1), data = stakes,
    +                method = "ds", meta.data = list(width = 20))
    +plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE)
    +
    +ddf.gof(ds.model)
    +
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#>           [0,3.33] (3.33,6.67] (6.67,10] (10,13.3] (13.3,16.7] (16.7,20]  Total
    +#> Observed    20.000       8.000     4.000     3.000       4.000     1.000 40.000
    +#> Expected    13.254      11.113     7.812     4.604       2.275     0.942 40.000
    +#> Chisquare    3.433       0.872     1.860     0.559       1.308     0.004  8.036
    +#> 
    +#> P = 0.090283 with 4 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.342811 p-value = 0.10286
    +
    +# extract data from observers 5 and 7 and fit an io model
    +stkpairs <- extract.stake.pairs(stake78,5,7,removal=FALSE)
    +io.model <- ddf(dsmodel = ~mcds(key = "hn", formula=~1),
    +                mrmodel=~glm(formula=~distance),
    +                data = stkpairs, method = "io")
    +#> Warning: no truncation distance specified; using largest observed distance
    +summary(io.model)
    +#> 
    +#> Summary for io.fi object 
    +#> Number of observations   :  68 
    +#> Number seen by primary   :  60 
    +#> Number seen by secondary :  55 
    +#> Number seen by both      :  47 
    +#> AIC                      :  116.2709 
    +#> 
    +#> 
    +#> Conditional detection function parameters:
    +#>                estimate         se
    +#> (Intercept)  1.81859268 0.43467528
    +#> distance    -0.04485342 0.04688151
    +#> 
    +#>                         Estimate         SE         CV
    +#> Average primary p(0)   0.8603972 0.05221053 0.06068190
    +#> Average secondary p(0) 0.8603972 0.05221053 0.06068190
    +#> Average combined p(0)  0.9805111 0.01457748 0.01486722
    +#> 
    +#> 
    +#> Summary for ds object
    +#> Number of observations :  68 
    +#> Distance range         :  0  -  19.34 
    +#> AIC                    :  391.1836 
    +#> Optimisation           :  mrds (nlminb) 
    +#> 
    +#> Detection function:
    +#>  Half-normal key function 
    +#> 
    +#> Detection function parameters 
    +#> Scale coefficient(s): 
    +#>             estimate        se
    +#> (Intercept) 2.340436 0.1284981
    +#> 
    +#>            Estimate         SE         CV
    +#> Average p 0.6309225 0.05837871 0.09252913
    +#> 
    +#> 
    +#> Summary for io object
    +#> Total AIC value :  507.4545 
    +#> 
    +#>                        Estimate          SE         CV
    +#> Average p             0.6186265  0.05797515 0.09371592
    +#> N in covered region 109.9209291 13.18643833 0.11996294
    +par(mfrow=c(3,2))
    +plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE)
    +
    +ddf.gof(io.model)
    +#> 
    +#> Goodness of fit results for ddf object
    +#> 
    +#> Chi-square tests
    +#> 
    +#> Distance sampling component:
    +#>           [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6]
    +#> Observed    19.000      16.000      12.000       5.000       4.000       7.000
    +#> Expected    15.217      14.183      12.322       9.977       7.530       5.297
    +#> Chisquare    0.940       0.233       0.008       2.483       1.655       0.548
    +#>           (16.6,19.3]  Total
    +#> Observed        5.000 68.000
    +#> Expected        3.473 68.000
    +#> Chisquare       0.671  6.538
    +#> 
    +#> P = 0.25731 with 5 degrees of freedom
    +#> 
    +#> Mark-recapture component:
    +#> Capture History 10
    +#>           [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6]
    +#> Observed         1           4           2           3           1           2
    +#> Expected         2           2           2           1           1           1
    +#> Chisquare        1           1           0           6           0           0
    +#>           (16.6,19.3] Total
    +#> Observed            0    13
    +#> Expected            1    10
    +#> Chisquare           1     9
    +#> Capture History 01
    +#>           [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6]
    +#> Observed         4           0           2           0           0           0
    +#> Expected         2           2           2           1           1           1
    +#> Chisquare        1           2           0           1           1           1
    +#>           (16.6,19.3] Total
    +#> Observed            2     8
    +#> Expected            1    10
    +#> Chisquare           1     7
    +#> Capture History 11
    +#>           [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6]
    +#> Observed        14          12           8           2           3           5
    +#> Expected        14          12           8           3           3           4
    +#> Chisquare        0           0           0           1           0           0
    +#>           (16.6,19.3] Total
    +#> Observed            3    47
    +#> Expected            3    47
    +#> Chisquare           0     1
    +#> 
    +#> MR total chi-square = 17.108  P = 0.1456 with 12 degrees of freedom
    +#> 
    +#> 
    +#> Total chi-square = 23.646  P = 0.12938 with 17 degrees of freedom
    +#> 
    +#> Distance sampling Cramer-von Mises test (unweighted)
    +#> Test statistic = 0.246294 p-value = 0.19319
    +# }
    +
    +
    +
    +
    +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.ds.html b/docs/reference/summary.ds.html new file mode 100644 index 00000000..c171c6a8 --- /dev/null +++ b/docs/reference/summary.ds.html @@ -0,0 +1,120 @@ + +Summary of distance detection function model object — summary.ds • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'ds'
    +summary(object, se = TRUE, N = TRUE, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    N
    +

    if TRUE, computes abundance in covered (sampled) region

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.io.fi.html b/docs/reference/summary.io.fi.html new file mode 100644 index 00000000..495006bd --- /dev/null +++ b/docs/reference/summary.io.fi.html @@ -0,0 +1,129 @@ + +Summary of distance detection function model object — summary.io.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io.fi'
    +summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ddfobj = NULL, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    N
    +

    if TRUE, computes abundance in covered (sampled) region

    + + +
    fittedmodel
    +

    full fitted model when called from trial or +io

    + + +
    ddfobj
    +

    distance sampling object description

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.io.html b/docs/reference/summary.io.html new file mode 100644 index 00000000..5f8ea777 --- /dev/null +++ b/docs/reference/summary.io.html @@ -0,0 +1,116 @@ + +Summary of distance detection function model object — summary.io • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'io'
    +summary(object, se = TRUE, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.rem.fi.html b/docs/reference/summary.rem.fi.html new file mode 100644 index 00000000..143908ff --- /dev/null +++ b/docs/reference/summary.rem.fi.html @@ -0,0 +1,125 @@ + +Summary of distance detection function model object — summary.rem.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem.fi'
    +summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    N
    +

    if TRUE, computes abundance in covered (sampled) region

    + + +
    fittedmodel
    +

    full fitted model when called from trial or +io

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.rem.html b/docs/reference/summary.rem.html new file mode 100644 index 00000000..aa14f0ae --- /dev/null +++ b/docs/reference/summary.rem.html @@ -0,0 +1,116 @@ + +Summary of distance detection function model object — summary.rem • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'rem'
    +summary(object, se = TRUE, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.trial.fi.html b/docs/reference/summary.trial.fi.html new file mode 100644 index 00000000..62ccde30 --- /dev/null +++ b/docs/reference/summary.trial.fi.html @@ -0,0 +1,125 @@ + +Summary of distance detection function model object — summary.trial.fi • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial.fi'
    +summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    N
    +

    if TRUE, computes abundance in covered (sampled) region

    + + +
    fittedmodel
    +

    full fitted model when called from trial or +io

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/summary.trial.html b/docs/reference/summary.trial.html new file mode 100644 index 00000000..541342cf --- /dev/null +++ b/docs/reference/summary.trial.html @@ -0,0 +1,116 @@ + +Summary of distance detection function model object — summary.trial • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Provides a brief summary of data and fitted detection probability model +parameters, model selection criterion, and optionally abundance in the +covered (sampled) region and its standard error.

    +
    + +
    +

    Usage

    +
    # S3 method for class 'trial'
    +summary(object, se = TRUE, ...)
    +
    + +
    +

    Arguments

    + + +
    object
    +

    a ddf model object

    + + +
    se
    +

    if TRUE, computes standard errors

    + + +
    ...
    +

    unspecified and unused arguments for S3 consistency

    + +
    +
    +

    Value

    +

    list of extracted and summarized objects

    +
    +
    +

    Details

    +

    The argument N is used to suppress computation of +abundance and average detection probability in calls to summarize the +ds and either io.fi or trial.fi for summaries of +io and trial objects respectively which are composed of a +ds model object and a mark-recapture model object. The corresponding +print function is called to print the summary results.

    +
    +
    +

    Note

    +

    This function is called by the generic function summary for any + ddf model object. Each function can be called directly by the + user, but it is typically safest to use the generic function + summary which calls the appropriate function based on the type of + ddf model.

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/survey.region.dht.html b/docs/reference/survey.region.dht.html new file mode 100644 index 00000000..567bf820 --- /dev/null +++ b/docs/reference/survey.region.dht.html @@ -0,0 +1,110 @@ + +Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region

    +
    + +
    +

    Usage

    +
    survey.region.dht(Nhat.by.sample, samples, width, left, point, areas.supplied)
    +
    + +
    +

    Arguments

    + + +
    Nhat.by.sample
    +

    dataframe of abundance by sample

    + + +
    samples
    +

    samples table

    + + +
    width
    +

    truncation width

    + + +
    left
    +

    left truncation if any

    + + +
    point
    +

    if TRUE point count otherwise line transect

    + + +
    areas.supplied
    +

    if TRUE, covered area is extracted from the +CoveredArea column of Nhat.by.sample

    + +
    +
    +

    Value

    +

    Revised Nhat.by.sample dataframe containing estimates extrapolated + to survey region

    +
    +
    +

    Note

    +

    Internal function called by dht and related functions.

    +
    +
    +

    Author

    +

    Jeff Laake and David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/test.breaks.html b/docs/reference/test.breaks.html new file mode 100644 index 00000000..9351fcbb --- /dev/null +++ b/docs/reference/test.breaks.html @@ -0,0 +1,96 @@ + +Test validity for histogram breaks(cutpoints) — test.breaks • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Determines whether user specified breaks for histograms are properly ordered +and match the left and right truncation.

    +
    + +
    +

    Usage

    +
    test.breaks(breaks, left, width)
    +
    + +
    +

    Arguments

    + + +
    breaks
    +

    vector of cutpoints (breaks) for distance histogram

    + + +
    left
    +

    left truncation value

    + + +
    width
    +

    right truncation value; either radius of point count or +half-width of transect

    + +
    +
    +

    Value

    +

    vector of breaks modified to be valid if necessary

    +
    +
    +

    Author

    +

    Jeff Laake

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/reference/varn.html b/docs/reference/varn.html new file mode 100644 index 00000000..caafbc89 --- /dev/null +++ b/docs/reference/varn.html @@ -0,0 +1,173 @@ + +Compute empirical variance of encounter rate — varn • mrds + Skip to contents + + +
    +
    +
    + +
    +

    Computes one of a series of possible variance estimates for the observed +encounter rate for a set of sample measurements (e.g., line lengths) and +number of observations per sample.

    +
    + +
    +

    Usage

    +
    varn(lvec,nvec,type)
    +
    +         covn(lvec, groups1, groups2, type)
    +
    + +
    +

    Arguments

    + + +
    lvec
    +

    vector of sample measurements (e.g., line lengths)

    + + +
    nvec
    +

    vector of number observed

    + + +
    type
    +

    choice of variance estimator to use for encounter rate

    + + +
    groups1
    +

    vector of number of groups observed

    + + +
    groups2
    +

    vector of number of individuals observed

    + +
    +
    +

    Value

    +

    Variance of encounter rate as defined by arguments

    +
    +
    +

    Details

    +

    The choice of type follows the notation of Fewster et al. (2009) in that there are 8 choices of encounter rate variance that can be computed for lines and one for points:

    +
    R2
    +

    random line placement with unequal line lengths +(design-assisted estimator)

    + +
    R3
    +

    random line placement, model-assisted estimator, based on +true contagion process

    + +
    R4
    +

    random line placement, model-assisted estimator, based on +apparent contagion process

    + +
    S1
    +

    systematic line placement, post-stratification with no +strata overlap

    + +
    S2
    +

    systematic line placement, post-stratification with no +strata overlap, variances weighted by line length per stratum

    + +
    O1
    +

    systematic line placement, post-stratification with +overlapping strata (akin to S1)

    + +
    O2
    +

    systematic line placement, post-stratification with +overlapping strata (weighted by line length per stratum, akin to S2)

    + +
    O3
    +

    systematic line placement, post-stratification with +overlapping strata, model-assisted estimator with trend in encounter rate +with line length

    + +
    P2
    +

    random point placement, potentially unequal number of +visits per point, design-based estimator

    + +
    P3
    +

    random point placement, potentially unequal number of +visits per point, model-based estimator

    + + +

    Default value is "R2", shown in Fewster et al. (2009) to have good +performance for completely random designs for lines. For systematic parallel +line transect designs, Fewster et al. recommend "O2". For point +transects the default is "P2" (but "P3" is also available).

    +

    For the systematic estimators, pairs are assigned in the order they are +given in the lengths and groups vectors.

    +
    +
    +

    Note

    +

    This function is also used with different calling arguments to compute +Innes et al variance of the estimated abundances/length rather than +observation encounter rate. The function covn is probably only valid for R3 +and R2. Currently, the R2 form is used for all types other than R3.

    +
    +
    +

    References

    +

    Fewster, R.M., S.T. Buckland, K.P. Burnham, D.L. Borchers, P.E. + Jupp, J.L. Laake and L. Thomas. 2009. Estimating the encounter rate + variance in distance sampling. Biometrics 65: 225-236.

    +
    +
    +

    Author

    +

    Jeff Laake, David L Miller

    +
    + +
    + + +
    + + + +
    + + + + + + + diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 00000000..a745104e --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +[{"path":"/articles/mrds-golftees.html","id":"aims","dir":"Articles","previous_headings":"","what":"Aims","title":"Double platform analysis","text":"aims practical learn model trial independent-observer configuration full point independence assumptions, include covariates detection function(s) select competing models.","code":""},{"path":"/articles/mrds-golftees.html","id":"golf-tee-data","dir":"Articles","previous_headings":"Aims","what":"Golf tee data","title":"Double platform analysis","text":"data come survey golf tees conducted statistics students University St Andrews. data collected along transect lines, 210 metres total. distance 4 metres centre line searched , purposes exercise, assume comprised total study area, divided two strata. 250 clusters tees total 760 individual tees total. population independently surveyed two observer teams. following data recorded detected group: perpendicular distance, cluster size, observer (team 1 2), ‘sex’ (males yellow females green golf tees occur single-sex clusters) ‘exposure’. Exposure subjective judgment whether cluster substantially obscured grass (exposure=0) (exposure=1). lengths grass varied along transect line grass slightly yellow along one part line compared rest. golf tee dataset provided part mrds package. Open R load mrds package golf tee dataset (called book.tee.data). elements required MRDS analysis contained within object dataset. data hierarchical structure (rather ‘flat file’ format) separate elements observations, samples regions. code , tables extracted avoid typing long names. Examine columns detections data particular structure. structure detection follows: detected object (case object group cluster golf tees) given unique number object column, object occurs twice - observer 1 observer 2, detected column indicates whether object seen (detected=1) seen (detected=0) observer, perpendicular distance distance column cluster size size column (default names ds function). ensure variables sex exposure treated correctly, define factor variables.","code":"library(knitr) library(mrds) # Access the golf tee data data(book.tee.data) # Investigate the structure of the dataset str(book.tee.data) ## List of 4 ## $ book.tee.dataframe:'data.frame': 324 obs. of 7 variables: ## ..$ object : num [1:324] 1 1 2 2 3 3 4 4 5 5 ... ## ..$ observer: Factor w/ 2 levels \"1\",\"2\": 1 2 1 2 1 2 1 2 1 2 ... ## ..$ detected: num [1:324] 1 0 1 0 1 0 1 0 1 0 ... ## ..$ distance: num [1:324] 2.68 2.68 3.33 3.33 0.34 0.34 2.53 2.53 1.46 1.46 ... ## ..$ size : num [1:324] 2 2 2 2 1 1 2 2 2 2 ... ## ..$ sex : num [1:324] 1 1 1 1 0 0 1 1 1 1 ... ## ..$ exposure: num [1:324] 1 1 0 0 0 0 1 1 0 0 ... ## $ book.tee.region :'data.frame': 2 obs. of 2 variables: ## ..$ Region.Label: Factor w/ 2 levels \"1\",\"2\": 1 2 ## ..$ Area : num [1:2] 1040 640 ## $ book.tee.samples :'data.frame': 11 obs. of 3 variables: ## ..$ Sample.Label: num [1:11] 1 2 3 4 5 6 7 8 9 10 ... ## ..$ Region.Label: Factor w/ 2 levels \"1\",\"2\": 1 1 1 1 1 1 2 2 2 2 ... ## ..$ Effort : num [1:11] 10 30 30 27 21 12 23 23 15 12 ... ## $ book.tee.obs :'data.frame': 162 obs. of 3 variables: ## ..$ object : int [1:162] 1 2 3 21 22 23 24 59 60 61 ... ## ..$ Region.Label: int [1:162] 1 1 1 1 1 1 1 1 1 1 ... ## ..$ Sample.Label: int [1:162] 1 1 1 1 1 1 1 1 1 1 ... # Extract the list elements from the dataset into easy-to-access objects detections <- book.tee.data$book.tee.dataframe # detection information region <- book.tee.data$book.tee.region # region info samples <- book.tee.data$book.tee.samples # transect info obs <- book.tee.data$book.tee.obs # links detections to transects and regions # Check detections head(detections) ## object observer detected distance size sex exposure ## 1 1 1 1 2.68 2 1 1 ## 21 1 2 0 2.68 2 1 1 ## 2 2 1 1 3.33 2 1 0 ## 22 2 2 0 3.33 2 1 0 ## 3 3 1 1 0.34 1 0 0 ## 23 3 2 0 0.34 1 0 0 # Define sex and exposure as factor variables detections$sex <- as.factor(detections$sex) detections$exposure <- as.factor(detections$exposure)"},{"path":[]},{"path":"/articles/mrds-golftees.html","id":"estimation-of-p0-distance-only","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses","what":"Estimation of p(0): distance only","title":"Double platform analysis","text":"start analysing data assuming Observer 2 generating trials Observer 1 vice versa, .e. trial configuration Observer 1 primary Observer 2 tracker. (data also analysed independent observer configuration - welcome try ). begin assuming full independence (.e. detections observers independent distances): requires mark-recapture (MR) model , start , perpendicular distance included covariate.","code":"# Fit trial configuration with full independence model fi.mr.dist <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance), data=detections, meta.data=list(width=4))"},{"path":"/articles/mrds-golftees.html","id":"examining-mrds-output","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses > Estimation of p(0): distance only","what":"Examining mrds output","title":"Double platform analysis","text":"fitted model, can create tables summarizing detection data. commands , tables created using det.tables function saved detection.tables. information detection summary tables can plotted, , interest space, one (six possible plots) shown (Figure 1). Figure 1: Detection distances observer 1 plot numbers : Histograms distances detections either, , observers. shaded regions show number observer 1. Histograms distances detections either, , observers. shaded regions show number observer 2. Histograms distances duplicates (detected observers). Histogram distances detections either, , observers. shown trial configuration. Histograms distances observer 2. shaded regions indicate number duplicates - example, shaded region number clusters distance bin detected Observer 1 given also detected Observer 2 (“|” symbol plot legend means “given ”). Histograms distances observer 1. shaded regions indicate number duplicates plot 5. shown trial configuration. Note independent observer configuration chosen, plots available. summary detection function model available using summary function. Q-Q plot interpretation Q-Q plot conventional, single platform analysis (Figure 2). Figure 2: Fitted detection function full independence, trial mode. Abbreviated \\(\\chi^2\\) goodness--fit assessment shows \\(\\chi^2\\) contribution distance sampling model 11.5 \\(\\chi^2\\) contribution mark-recapture model 3.4. combination elements produces total \\(\\chi^2\\) 14.9 17 degrees freedom, resulting \\(p\\)-value 0.604 (two) detection functions can plotted (Figure 3). Figure 3: Observer 1 detection function (left) conditional detection probabilty plot (right). plot labelled “Observer=1 detections” shows histogram Observer 1 detections estimated Observer 1 detection function overlaid adjusted p(0). dots show estimated detection probability Observer 1 detections. “Conditional detection probability” shows proportion Obs 2’s detections detected Obs 1 (also see detection tables). fitted line estimated detection probability function Obs 1 (given detection Obs 2) - MR model. Dots estimated detection probabilities Obs 1 detection. evidence unmodelled heterogeneity fitted line left-hand plot declines slowly histogram distance increases.","code":"# Create a set of tables summarizing the double observer data detection.tables <- det.tables(fi.mr.dist) # Print these detection tables print(detection.tables) ## ## Observer 1 detections ## Detected ## Missed Detected ## [0,0.4] 1 25 ## (0.4,0.8] 2 16 ## (0.8,1.2] 2 16 ## (1.2,1.6] 6 22 ## (1.6,2] 5 9 ## (2,2.4] 2 10 ## (2.4,2.8] 6 12 ## (2.8,3.2] 6 9 ## (3.2,3.6] 2 3 ## (3.6,4] 6 2 ## ## Observer 2 detections ## Detected ## Missed Detected ## [0,0.4] 4 22 ## (0.4,0.8] 1 17 ## (0.8,1.2] 0 18 ## (1.2,1.6] 2 26 ## (1.6,2] 1 13 ## (2,2.4] 2 10 ## (2.4,2.8] 3 15 ## (2.8,3.2] 4 11 ## (3.2,3.6] 2 3 ## (3.6,4] 1 7 ## ## Duplicate detections ## ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] (2.8,3.2] ## 21 15 16 20 8 8 9 5 ## (3.2,3.6] (3.6,4] ## 1 1 ## ## Observer 1 detections of those seen by Observer 2 ## Missed Detected Prop. detected ## [0,0.4] 1 21 0.9545455 ## (0.4,0.8] 2 15 0.8823529 ## (0.8,1.2] 2 16 0.8888889 ## (1.2,1.6] 6 20 0.7692308 ## (1.6,2] 5 8 0.6153846 ## (2,2.4] 2 8 0.8000000 ## (2.4,2.8] 6 9 0.6000000 ## (2.8,3.2] 6 5 0.4545455 ## (3.2,3.6] 2 1 0.3333333 ## (3.6,4] 6 1 0.1428571 # Plot detection information, change number to see other plots plot(detection.tables, which=1) # Produce a summary of the fitted detection function object summary(fi.mr.dist) ## ## Summary for trial.fi object ## Number of observations : 162 ## Number seen by primary : 124 ## Number seen by secondary (trials) : 142 ## Number seen by both (detected trials): 104 ## AIC : 452.8094 ## ## ## Conditional detection function parameters: ## estimate se ## (Intercept) 2.900233 0.4876238 ## distance -1.058677 0.2235722 ## ## Estimate SE CV ## Average p 0.6423252 0.04069410 0.06335435 ## Average primary p(0) 0.9478579 0.06109656 0.06445750 ## N in covered region 193.0486185 15.84826582 0.08209469 # Produce goodness of fit statistics and a qq plot gof.result <- ddf.gof(fi.mr.dist, main=\"Full independence, trial configuration\\ngoodness of fit Golf tee data\") # Extract chi-square statistics for reporting chi.distance <- gof.result$chisquare$chi1$chisq chi.markrecap <- gof.result$chisquare$chi2$chisq chi.total <- gof.result$chisquare$pooled.chi par(mfrow=c(1,2)) # Plot detection functions plot(fi.mr.dist) par(mfrow=c(1,1))"},{"path":"/articles/mrds-golftees.html","id":"estimating-abundance","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses > Estimation of p(0): distance only","what":"Estimating abundance","title":"Double platform analysis","text":"Abundance estimated using dht function. function, need supply information transects survey regions. Table 1: Survey summary statistics golftees Table 1: Abundance estimates golftee population two strata estimated abundance 593 (recall true abundance 760) estimate negatively biased. 95% confidence interval include true value.","code":"# Calculate density estimates using the dht function tee.abund <- dht(model=fi.mr.dist, region.table=region, sample.table=samples, obs.table=obs) # Print out results in a nice format knitr::kable(tee.abund$individuals$summary, digits=2, caption=\"Survey summary statistics for golftees\") knitr::kable(tee.abund$individuals$N, digits=2, caption=\"Abundance estimates for golftee population with two strata\")"},{"path":"/articles/mrds-golftees.html","id":"estimation-of-p0-distance-and-other-explanatory-variables","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses","what":"Estimation of p(0): distance and other explanatory variables","title":"Double platform analysis","text":"including covariates, size, sex exposure, MR model? MR model use? command , distance sex included detection function - remember sex defined factor earlier . code , possible models (excluding interaction terms) fitted. see preferred model contains distance + sex + exposure check goodness--fit statistics (Figure 4) detection function plots (Figure 5). Figure 4: Preferred model goodness fit. Figure 5: Detection functions full independence model distance, sex exposure MR component. produce abundance estimates. model incorporates effect variables causing heterogeneity. estimated abundance 651 less biased previous estimate 95% confidence interval (494, 858) contains true value. model reasonable fit data (.e. non-significant \\(\\chi^2\\) Cramer von Mises tests). model lower AIC (405.7) model distance (452.81) preferred.","code":"# Full independence model # Set up list with possible models mr.formula <- c(\"~distance\",\"~distance+size\",\"~distance+sex\",\"~distance+exposure\", \"~distance+size+sex\",\"~distance+size+exposure\",\"~distance+sex+exposure\", \"~distance+size+sex+exposure\") num.mr.models <- length(mr.formula) # Create dataframe to store results fi.results <- data.frame(MRmodel=mr.formula, AIC=rep(NA,num.mr.models)) # Loop through all MR models for (i in 1:num.mr.models) { fi.model <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=as.formula(mr.formula[i])), data=detections, meta.data=list(width=4)) fi.results$AIC[i] <- summary(fi.model)$aic } # Calculate delta AIC fi.results$deltaAIC <- fi.results$AIC - min(fi.results$AIC) # Order by delta AIC fi.results <- fi.results[order(fi.results$deltaAIC), ] # Print results in pretty way knitr::kable(fi.results, digits=2) # Fit chosen model fi.mr.dist.sex.exp <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), data=detections, meta.data=list(width=4)) # Check goodness-of-fit ddf.gof(fi.mr.dist.sex.exp, main=\"FI trial mode\\nMR=dist+sex+exp\") ## ## Goodness of fit results for ddf object ## ## Chi-square tests ## ## Distance sampling component: ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 25.000 16.000 16.000 22.000 9.000 10.000 12.000 ## Expected 20.276 19.341 18.074 16.345 14.083 11.511 9.046 ## Chisquare 1.101 0.577 0.238 1.957 1.834 0.198 0.964 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 9.000 3.000 2.000 124.000 ## Expected 6.915 5.044 3.366 124.000 ## Chisquare 0.629 0.828 0.554 8.881 ## ## No degrees of freedom for test ## ## Mark-recapture component: ## Capture History 01 ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 1 2 2 6 5 2 6 ## Expected 1 2 2 6 4 4 6 ## Chisquare 0 0 0 0 0 1 0 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 6 2 6 38 ## Expected 7 2 5 38 ## Chisquare 0 0 0 2 ## Capture History 11 ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 21 15 16 20 8 8 9 ## Expected 21 15 16 20 9 6 9 ## Chisquare 0 0 0 0 0 1 0 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 5 1 1 104 ## Expected 4 1 2 104 ## Chisquare 0 0 1 2 ## ## ## Total chi-square = 12.205 P = 0.66344 with 15 degrees of freedom ## ## Distance sampling Cramer-von Mises test (unweighted) ## Test statistic = 0.0976947 p-value = 0.596294 par(mfrow=c(1,2)) plot(fi.mr.dist.sex.exp) # Get abundance estimates tee.abund.fi <- dht(model=fi.mr.dist.sex.exp, region.table=region, sample.table=samples, obs.table=obs) # Print results print(tee.abund.fi) ## Abundance and density estimates from distance sampling ## Variance : R2, N/L ## ## Summary statistics ## ## Region Area CoveredArea Effort n k ER se.ER cv.ER ## 1 1 1040 1040 130 72 6 0.5538462 0.02926903 0.05284685 ## 2 2 640 640 80 52 5 0.6500000 0.08292740 0.12758061 ## 3 Total 1680 1680 210 124 11 0.5904762 0.03641856 0.06167659 ## ## Summary for clusters ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 119.28976 14.18666 0.1189260 91.64685 155.2704 10.12494 ## 2 2 98.17731 18.59356 0.1893876 63.58200 151.5961 7.83844 ## 3 Total 217.46707 26.05226 0.1197987 169.90391 278.3451 23.21368 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.1147017 0.01364102 0.1189260 0.08812198 0.1492985 10.12494 ## 2 2 0.1534020 0.02905244 0.1893876 0.09934687 0.2368689 7.83844 ## 3 Total 0.1294447 0.01550730 0.1197987 0.10113328 0.1656816 23.21368 ## ## Summary for individuals ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 371.0397 37.86856 0.1020607 297.1733 463.2666 11.904084 ## 2 2 279.7141 67.25221 0.2404320 154.4960 506.4208 5.482654 ## 3 Total 650.7538 82.72649 0.1271241 493.7469 857.6875 11.907393 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.3567690 0.03641208 0.1020607 0.2857436 0.4454487 11.904084 ## 2 2 0.4370533 0.10508158 0.2404320 0.2414000 0.7912825 5.482654 ## 3 Total 0.3873535 0.04924196 0.1271241 0.2938970 0.5105283 11.907393 ## ## Expected cluster size ## Region Expected.S se.Expected.S cv.Expected.S ## 1 1 3.110407 0.2740170 0.08809682 ## 2 2 2.849071 0.2211204 0.07761141 ## 3 Total 2.992425 0.1758058 0.05875027"},{"path":"/articles/mrds-golftees.html","id":"point-independence","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses","what":"Point independence","title":"Double platform analysis","text":"less restrictive assumption full independence point independence, assumes detections independent transect centre line .e. perpendicular distance zero (Buckland, Laake, & Borchers, 2010). Determine simple point independence model better simple full independence one. requires distance sampling (DS) model specified well MR model. try half-normal key function DS model (Figure 6). Figure 6: Point independence model trial configuration goodness fit. AIC point independence model 452.03 marginally smaller first full independence model fitted hence preferred. results estimated abundance 688. Can better covariates included DS model?","code":"# Fit trial configuration with point independence model pi.mr.dist <- ddf(method='trial', mrmodel=~glm(link='logit', formula=~distance), dsmodel=~cds(key='hn'), data=detections, meta.data=list(width=4)) # Summary pf the model summary(pi.mr.dist) ## ## Summary for trial.fi object ## Number of observations : 162 ## Number seen by primary : 124 ## Number seen by secondary (trials) : 142 ## Number seen by both (detected trials): 104 ## AIC : 140.8887 ## ## ## Conditional detection function parameters: ## estimate se ## (Intercept) 2.900233 0.4876238 ## distance -1.058677 0.2235722 ## ## Estimate SE CV ## Average primary p(0) 0.9478579 0.02409996 0.02542571 ## ## ## ## Summary for ds object ## Number of observations : 124 ## Distance range : 0 - 4 ## AIC : 311.1385 ## Optimisation : mrds (nlminb) ## ## Detection function: ## Half-normal key function ## ## Detection function parameters ## Scale coefficient(s): ## estimate se ## (Intercept) 0.6632435 0.09981249 ## ## Estimate SE CV ## Average p 0.5842744 0.04637627 0.07937412 ## ## ## Summary for trial object ## ## Total AIC value = 452.0272 ## Estimate SE CV ## Average p 0.5538091 0.04615832 0.08334697 ## N in covered region 223.9038534 22.99246338 0.10268900 # Produce goodness of fit statistics and a qq plot gof.results <- ddf.gof(pi.mr.dist, main=\"Point independence, trial configuration\\n goodness of fit Golftee data\") # Get abundance estimates tee.abund.pi <- dht(model=pi.mr.dist, region.table=region, sample.table=samples, obs.table=obs) # Print results print(tee.abund.pi) ## Abundance and density estimates from distance sampling ## Variance : R2, N/L ## ## Summary statistics ## ## Region Area CoveredArea Effort n k ER se.ER cv.ER ## 1 1 1040 1040 130 72 6 0.5538462 0.02926903 0.05284685 ## 2 2 640 640 80 52 5 0.6500000 0.08292740 0.12758061 ## 3 Total 1680 1680 210 124 11 0.5904762 0.03641856 0.06167659 ## ## Summary for clusters ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 130.00869 12.83042 0.09868894 106.66570 158.4601 48.427773 ## 2 2 93.89516 14.30894 0.15239268 66.25307 133.0701 8.094137 ## 3 Total 223.90385 23.21562 0.10368567 181.78333 275.7840 44.038262 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.1250084 0.01233694 0.09868894 0.1025632 0.1523655 48.427773 ## 2 2 0.1467112 0.02235771 0.15239268 0.1035204 0.2079220 8.094137 ## 3 Total 0.1332761 0.01381882 0.10368567 0.1082044 0.1641571 44.038262 ## ## Summary for individuals ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 413.4999 44.00744 0.1064267 332.9536 513.5313 30.289360 ## 2 2 274.4628 53.42626 0.1946576 171.1754 440.0740 5.987499 ## 3 Total 687.9626 79.79844 0.1159924 542.4532 872.5040 25.993175 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.3975960 0.04231485 0.1064267 0.3201477 0.4937801 30.289360 ## 2 2 0.4288481 0.08347854 0.1946576 0.2674615 0.6876156 5.987499 ## 3 Total 0.4095016 0.04749907 0.1159924 0.3228888 0.5193476 25.993175 ## ## Expected cluster size ## Region Expected.S se.Expected.S cv.Expected.S ## 1 1 3.180556 0.2114629 0.06648615 ## 2 2 2.923077 0.1750319 0.05987935 ## 3 Total 3.072581 0.1391365 0.04528327"},{"path":"/articles/mrds-golftees.html","id":"covariates-in-the-ds-model","dir":"Articles","previous_headings":"Aims > Golf tee survey analyses > Point independence","what":"Covariates in the DS model","title":"Double platform analysis","text":"include covariates DS detection function, need specify MCDS model follows: Use summary function check AIC decide going include additional covariates detection function. Now try point independence model preferred MR model full independence analyses. indicates sex included DS model. check goodness fit obtain abundance (Figure 7). Figure 7: Goodness fit point independence model sex covariate distance sampling component distance, sex exposure mr component. model estimated abundance 695, closest true value models - still less true value indicating, perhaps, unmodelled heterogeneity trackline (perhaps just bad luck - remember one survey). complex modelling worthwhile? case, estimated \\(p(0)\\) best model 0.97 (close 1). ran conventional distance sampling analysis, pooling data two observers, get robust estimate true abundance.","code":"# Fit the PI-trial model - DS sex and MR distance pi.mr.dist.ds.sex <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance), dsmodel=~mcds(key='hn',formula=~sex), data=detections, meta.data=list(width=4)) # Point independence model, Include covariates in DS model # Use selected MR model, iterate across DS models ds.formula <- c(\"~size\",\"~sex\",\"~exposure\",\"~size+sex\",\"~size+exposure\",\"~sex+exposure\", \"~size+sex+exposure\") num.ds.models <- length(ds.formula) # Create dataframe to store results pi.results <- data.frame(DSmodel=ds.formula, AIC=rep(NA,num.ds.models)) # Loop through ds models - use selected MR model from earlier for (i in 1:num.ds.models) { pi.model <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), dsmodel=~mcds(key='hn',formula=as.formula(ds.formula[i])), data=detections, meta.data=list(width=4)) pi.results$AIC[i] <- summary(pi.model)$AIC } # Calculate delta AIC pi.results$deltaAIC <- pi.results$AIC - min(pi.results$AIC) # Order by delta AIC pi.results <- pi.results[order(pi.results$deltaAIC), ] knitr::kable(pi.results, digits = 2) # Fit chosen model pi.ds.sex <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), dsmodel=~mcds(key='hn',formula=~sex), data=detections, meta.data=list(width=4)) summary(pi.ds.sex) ## ## Summary for trial.fi object ## Number of observations : 162 ## Number seen by primary : 124 ## Number seen by secondary (trials) : 142 ## Number seen by both (detected trials): 104 ## AIC : 94.89911 ## ## ## Conditional detection function parameters: ## estimate se ## (Intercept) 0.7870962 0.6774633 ## distance -1.9435496 0.3706866 ## sex1 2.8059863 0.6828331 ## exposure1 3.6094527 0.7332797 ## ## Estimate SE CV ## Average primary p(0) 0.9697357 0.02018875 0.02081882 ## ## ## ## Summary for ds object ## Number of observations : 124 ## Distance range : 0 - 4 ## AIC : 304.3594 ## Optimisation : mrds (nlminb) ## ## Detection function: ## Half-normal key function ## ## Detection function parameters ## Scale coefficient(s): ## estimate se ## (Intercept) 0.2525377 0.1327279 ## sex1 0.5832341 0.2041094 ## ## Estimate SE CV ## Average p 0.5605421 0.04616356 0.0823552 ## ## ## Summary for trial object ## ## Total AIC value = 399.2585 ## Estimate SE CV ## Average p 0.5435777 0.04643912 0.08543235 ## N in covered region 228.1182656 24.21303261 0.10614245 # Check goodness-of-fit ddf.gof(pi.ds.sex, main=\"PI trial configutation\\nGolfTee DS model sex\") ## ## Goodness of fit results for ddf object ## ## Chi-square tests ## ## Distance sampling component: ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 25.000 16.000 16.000 22.000 9.000 10.000 12.000 ## Expected 21.917 20.740 18.630 15.976 13.181 10.553 8.261 ## Chisquare 0.434 1.083 0.371 2.272 1.326 0.029 1.692 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 9.000 3.000 2.000 124.000 ## Expected 6.354 4.810 3.579 124.000 ## Chisquare 1.102 0.681 0.697 9.687 ## ## P = 0.20699 with 7 degrees of freedom ## ## Mark-recapture component: ## Capture History 01 ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 1 2 2 6 5 2 6 ## Expected 1 2 2 6 4 4 6 ## Chisquare 0 0 0 0 0 1 0 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 6 2 6 38 ## Expected 7 2 5 38 ## Chisquare 0 0 0 2 ## Capture History 11 ## [0,0.4] (0.4,0.8] (0.8,1.2] (1.2,1.6] (1.6,2] (2,2.4] (2.4,2.8] ## Observed 21 15 16 20 8 8 9 ## Expected 21 15 16 20 9 6 9 ## Chisquare 0 0 0 0 0 1 0 ## (2.8,3.2] (3.2,3.6] (3.6,4] Total ## Observed 5 1 1 104 ## Expected 4 1 2 104 ## Chisquare 0 0 1 2 ## ## MR total chi-square = 3.3242 P = 0.76719 with 6 degrees of freedom ## ## ## Total chi-square = 13.012 P = 0.44692 with 13 degrees of freedom ## ## Distance sampling Cramer-von Mises test (unweighted) ## Test statistic = 0.081285 p-value = 0.684457 # Get abundance estimates tee.abund.pi.ds.sex <- dht(model=pi.ds.sex, region.table=region, sample.table=samples, obs.table=obs) print(tee.abund.pi.ds.sex) ## Abundance and density estimates from distance sampling ## Variance : R2, N/L ## ## Summary statistics ## ## Region Area CoveredArea Effort n k ER se.ER cv.ER ## 1 1 1040 1040 130 72 6 0.5538462 0.02926903 0.05284685 ## 2 2 640 640 80 52 5 0.6500000 0.08292740 0.12758061 ## 3 Total 1680 1680 210 124 11 0.5904762 0.03641856 0.06167659 ## ## Summary for clusters ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 125.7678 12.50301 0.0994134 102.97968 153.5987 43.661605 ## 2 2 102.3504 17.53164 0.1712904 68.75816 152.3544 7.394232 ## 3 Total 228.1183 25.15313 0.1102635 182.12587 285.7252 28.045408 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.1209306 0.01202212 0.0994134 0.09901892 0.1476911 43.661605 ## 2 2 0.1599226 0.02739319 0.1712904 0.10743463 0.2380538 7.394232 ## 3 Total 0.1357847 0.01497210 0.1102635 0.10840826 0.1700745 28.045408 ## ## Summary for individuals ## ## Abundance: ## Region Estimate se cv lcl ucl df ## 1 1 395.0545 36.33887 0.09198445 329.0893 474.2422 79.293122 ## 2 2 299.7763 65.43246 0.21827099 175.5600 511.8809 5.685162 ## 3 Total 694.8307 84.25522 0.12126006 537.2149 898.6902 15.167148 ## ## Density: ## Region Estimate se cv lcl ucl df ## 1 1 0.3798601 0.03494122 0.09198445 0.3164320 0.4560021 79.293122 ## 2 2 0.4684004 0.10223822 0.21827099 0.2743125 0.7998140 5.685162 ## 3 Total 0.4135897 0.05015192 0.12126006 0.3197708 0.5349347 15.167148 ## ## Expected cluster size ## Region Expected.S se.Expected.S cv.Expected.S ## 1 1 3.141141 0.2081675 0.06627129 ## 2 2 2.928920 0.1866200 0.06371632 ## 3 Total 3.045923 0.1371508 0.04502767"},{"path":[]},{"path":"/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Laura Marshall. Maintainer. Jeff Laake. Author. David Miller. Author. Felix Petersma. Author. Len Thomas. Contributor. David Borchers. Contributor. Jon Bishop. Contributor. Jonah McArthur. Contributor. Eric Rexstad. Reviewer.","code":""},{"path":"/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Laake J, Miller D, Petersma F (2024). mrds: Mark-Recapture Distance Sampling. R package version 3.0.0, https://github.com/DistanceDevelopment/mrds/.","code":"@Manual{, title = {mrds: Mark-Recapture Distance Sampling}, author = {Jeff Laake and David Miller and Felix Petersma}, year = {2024}, note = {R package version 3.0.0}, url = {https://github.com/DistanceDevelopment/mrds/}, }"},{"path":[]},{"path":"/index.html","id":"what-is-mrds","dir":"","previous_headings":"","what":"What is mrds?","title":"Mark-Recapture Distance Sampling","text":"package R analyzes single double observer distance sampling data line point sampling. used program DISTANCE one analysis engines. Supported double observer configurations include independent, trial removal. options mrds fully supported via DISTANCE. wish perform conventional multiple covariate distance sampling analysis (CDS/MCDS) (opposed double observer analysis), may want try Distance R package, simplified interface available https://github.com/DistanceDevelopment/Distance.","code":""},{"path":"/index.html","id":"getting-mrds","dir":"","previous_headings":"","what":"Getting mrds","title":"Mark-Recapture Distance Sampling","text":"easiest way ensure latest version mrds, install using remotes package: install mrds github: Otherwise: One can download Windows package binary using “Releases” tab github. install R, R menu, use “Packagesfrom Local Zip file” browse location downloaded zip. , download package source files. Finally current stable version mrds available CRAN, though may month date due CRAN policy.","code":"install.packages(\"remotes\") library(remotes) install_github(\"DistanceDevelopment/mrds\")"},{"path":"/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling","text":"following references methods used package. Burt, M. L., D. L. Borchers, K. J. Jenkins T. . Marques. (2014). “Using mark-recapture distance sampling methods line transect surveys.” Methods Ecology Evolution 5: 1180-1191. Buckland, S. T., J. Laake, et al. (2010). “Double observer line transect methods: levels independence.” Biometrics 66: 169-177. Borchers, D. L., J. L. Laake, et al. (2006). “Accommodating unmodeled heterogeneity double-observer distance sampling surveys.” Biometrics 62(2): 372-378. Buckland, S. T., D. R. Anderson, et al., Eds. (2004). Advanced distance sampling: estimating abundance biological populations. Oxford, UK; New York, Oxford University Press. (see chapter 6).","code":""},{"path":"/reference/add.df.covar.line.html","id":null,"dir":"Reference","previous_headings":"","what":"Add covariate levels detection function plots — add.df.covar.line","title":"Add covariate levels detection function plots — add.df.covar.line","text":"Add line lines plot detection function correspond given covariate combination. can particularly useful small number factor levels quantiles continuous covariate specified.","code":""},{"path":"/reference/add.df.covar.line.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add covariate levels detection function plots — add.df.covar.line","text":"","code":"add.df.covar.line(ddf, data, ndist = 250, pdf = FALSE, breaks = \"Sturges\", ...) add_df_covar_line(ddf, data, ndist = 250, pdf = FALSE, breaks = \"Sturges\", ...)"},{"path":"/reference/add.df.covar.line.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add covariate levels detection function plots — add.df.covar.line","text":"ddf fitted detection function object. data data.frame covariate combination want plot. ndist number distances evaluate detection function. pdf line drawn probability density scale; ignored line transects. breaks required ensure PDF lines right size, match supplied original plot command. Defaults \"Sturges\" breaks, hist. used pdf=TRUE. ... extra arguments give line (lty, lwd, col).","code":""},{"path":"/reference/add.df.covar.line.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add covariate levels detection function plots — add.df.covar.line","text":"invisibly, values detectability truncation range.","code":""},{"path":"/reference/add.df.covar.line.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add covariate levels detection function plots — add.df.covar.line","text":"covariates must specified data. Plots can become quite busy approach used. may useful fix covariates median level plot set values covariate interest. example setting weather (e.g., Beaufort) median plotting levels observer, creating second plot fixed observer levels weather. Arguments lines supplied ... aesthetics like line type (lty), line width (lwd) colour (col) recycled. default lty used distinguish lines. may useful add legend plot (lines plotted order data).","code":""},{"path":"/reference/add.df.covar.line.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add covariate levels detection function plots — add.df.covar.line","text":"David L Miller","code":""},{"path":"/reference/add.df.covar.line.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add covariate levels detection function plots — add.df.covar.line","text":"","code":"if (FALSE) { # \\dontrun{ # fit an example model data(book.tee.data) egdata <- book.tee.data$book.tee.dataframe result <- ddf(dsmodel = ~mcds(key = \"hn\", formula = ~sex), data = egdata[egdata$observer==1, ], method = \"ds\", meta.data = list(width = 4)) # make a base plot, showpoints=FALSE makes the plot less busy plot(result, showpoints=FALSE) # add lines for sex one at a time add.df.covar.line(result, data.frame(sex=0), lty=2) add.df.covar.line(result, data.frame(sex=1), lty=3) # add a legend legend(3, 1, c(\"Average\", \"sex==0\", \"sex==1\"), lty=1:3) # alternatively we can add both at once # fixing line type and varying colour plot(result, showpoints=FALSE) add.df.covar.line(result, data.frame(sex=c(0,1)), lty=1, col=c(\"red\", \"green\")) # add a legend legend(3, 1, c(\"Average\", \"sex==0\", \"sex==1\"), lty=1, col=c(\"black\", \"red\", \"green\")) } # }"},{"path":"/reference/adj.check.order.html","id":null,"dir":"Reference","previous_headings":"","what":"Check order of adjustment terms — adj.check.order","title":"Check order of adjustment terms — adj.check.order","text":"'adj.check.order' checks Cosine, Hermite simple polynomials correct order.","code":""},{"path":"/reference/adj.check.order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check order of adjustment terms — adj.check.order","text":"","code":"adj.check.order(adj.series, adj.order, key)"},{"path":"/reference/adj.check.order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check order of adjustment terms — adj.check.order","text":"adj.series Adjustment series used ('cos','herm','poly') adj.order Integer check key key function used adjustment series","code":""},{"path":"/reference/adj.check.order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check order of adjustment terms — adj.check.order","text":"Nothing! Just calls stop something goes wrong.","code":""},{"path":"/reference/adj.check.order.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Check order of adjustment terms — adj.check.order","text":"even functions allowed adjustment terms, per p.47 Buckland et al (2001). incorrect terms supplied error throw via stop.","code":""},{"path":"/reference/adj.check.order.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Check order of adjustment terms — adj.check.order","text":"S.T.Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake. 1993. Robust Models. : Distance Sampling, eds. S.T.Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake. Chapman & Hall.","code":""},{"path":[]},{"path":"/reference/adj.check.order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check order of adjustment terms — adj.check.order","text":"David Miller","code":""},{"path":"/reference/adj.cos.html","id":null,"dir":"Reference","previous_headings":"","what":"Cosine adjustment term, not the series. — adj.cos","title":"Cosine adjustment term, not the series. — adj.cos","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.cos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cosine adjustment term, not the series. — adj.cos","text":"","code":"adj.cos(distance, scaling, adj.order)"},{"path":"/reference/adj.cos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cosine adjustment term, not the series. — adj.cos","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order","code":""},{"path":"/reference/adj.cos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cosine adjustment term, not the series. — adj.cos","text":"scalar vector containing cosine adjustment term every value distance argument","code":""},{"path":"/reference/adj.cos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cosine adjustment term, not the series. — adj.cos","text":"Felix Petersma","code":""},{"path":"/reference/adj.herm.html","id":null,"dir":"Reference","previous_headings":"","what":"Hermite polynomial adjustment term, not the series. — adj.herm","title":"Hermite polynomial adjustment term, not the series. — adj.herm","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.herm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hermite polynomial adjustment term, not the series. — adj.herm","text":"","code":"adj.herm(distance, scaling, adj.order)"},{"path":"/reference/adj.herm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hermite polynomial adjustment term, not the series. — adj.herm","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order","code":""},{"path":"/reference/adj.herm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hermite polynomial adjustment term, not the series. — adj.herm","text":"scalar vector containing Hermite adjustment term every value distance argument","code":""},{"path":"/reference/adj.herm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Hermite polynomial adjustment term, not the series. — adj.herm","text":"Felix Petersma","code":""},{"path":"/reference/adj.poly.html","id":null,"dir":"Reference","previous_headings":"","what":"Simple polynomial adjustment term, not the series. — adj.poly","title":"Simple polynomial adjustment term, not the series. — adj.poly","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.poly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simple polynomial adjustment term, not the series. — adj.poly","text":"","code":"adj.poly(distance, scaling, adj.order)"},{"path":"/reference/adj.poly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simple polynomial adjustment term, not the series. — adj.poly","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order","code":""},{"path":"/reference/adj.poly.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simple polynomial adjustment term, not the series. — adj.poly","text":"scalar vector containing polynomial adjustment term every value distance argument","code":""},{"path":"/reference/adj.poly.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simple polynomial adjustment term, not the series. — adj.poly","text":"Felix Petersma","code":""},{"path":"/reference/adj.series.grad.cos.html","id":null,"dir":"Reference","previous_headings":"","what":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","title":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.series.grad.cos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","text":"","code":"adj.series.grad.cos( distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp = FALSE )"},{"path":"/reference/adj.series.grad.cos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order adj.parm vector parameters (a_j) adj.exp boolean, defaults FALSE","code":""},{"path":"/reference/adj.series.grad.cos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","text":"scalar vector containing gradient cosine adjustment series every value distance argument","code":""},{"path":"/reference/adj.series.grad.cos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Series of the gradient of the cosine adjustment series w.r.t. the scaled distance. — adj.series.grad.cos","text":"Felix Petersma","code":""},{"path":"/reference/adj.series.grad.herm.html","id":null,"dir":"Reference","previous_headings":"","what":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","title":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.series.grad.herm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","text":"","code":"adj.series.grad.herm( distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp = FALSE )"},{"path":"/reference/adj.series.grad.herm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order adj.parm vector parameters (a_j) adj.exp boolean, defaults FALSE","code":""},{"path":"/reference/adj.series.grad.herm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","text":"scalar vector containing gradient Hermite adjustment series every value distance argument","code":""},{"path":"/reference/adj.series.grad.herm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.herm","text":"Felix Petersma","code":""},{"path":"/reference/adj.series.grad.poly.html","id":null,"dir":"Reference","previous_headings":"","what":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","title":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","text":"internal use – called 'mrds' 'Distance' users directly.","code":""},{"path":"/reference/adj.series.grad.poly.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","text":"","code":"adj.series.grad.poly( distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp = FALSE )"},{"path":"/reference/adj.series.grad.poly.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","text":"distance perpendicular distance vector/scalar scaling scale parameter adj.order adjustment order adj.parm vector parameters (a_j) adj.exp boolean, defaults FALSE","code":""},{"path":"/reference/adj.series.grad.poly.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","text":"scalar vector containing gradient polynomial adjustment series every value distance argument","code":""},{"path":"/reference/adj.series.grad.poly.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance. — adj.series.grad.poly","text":"Felix Petersma","code":""},{"path":"/reference/AIC.ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"Akaike's An Information Criterion for detection functions — AIC.ddf","title":"Akaike's An Information Criterion for detection functions — AIC.ddf","text":"Extract AIC fitted detection function.","code":""},{"path":"/reference/AIC.ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Akaike's An Information Criterion for detection functions — AIC.ddf","text":"","code":"# S3 method for class 'ddf' AIC(object, ..., k = 2)"},{"path":"/reference/AIC.ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Akaike's An Information Criterion for detection functions — AIC.ddf","text":"object fitted detection function object ... optionally fitted model objects. k penalty per parameter used; default k = 2 \"classical\" AIC","code":""},{"path":"/reference/AIC.ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Akaike's An Information Criterion for detection functions — AIC.ddf","text":"David L Miller","code":""},{"path":"/reference/apex.gamma.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the apex for a gamma detection function — apex.gamma","title":"Get the apex for a gamma detection function — apex.gamma","text":"Get apex gamma detection function","code":""},{"path":"/reference/apex.gamma.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the apex for a gamma detection function — apex.gamma","text":"","code":"apex.gamma(ddfobj)"},{"path":"/reference/apex.gamma.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the apex for a gamma detection function — apex.gamma","text":"ddfobj ddf object","code":""},{"path":"/reference/apex.gamma.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the apex for a gamma detection function — apex.gamma","text":"distance gamma peaks","code":""},{"path":"/reference/apex.gamma.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the apex for a gamma detection function — apex.gamma","text":"Jeff Laake","code":""},{"path":"/reference/assign.default.values.html","id":null,"dir":"Reference","previous_headings":"","what":"Assign default values to list elements that have not been already assigned — assign.default.values","title":"Assign default values to list elements that have not been already assigned — assign.default.values","text":"Assigns default values argument list x argument=value pairs ... x$argument already exist","code":""},{"path":"/reference/assign.default.values.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Assign default values to list elements that have not been already assigned — assign.default.values","text":"","code":"assign.default.values(x, ...)"},{"path":"/reference/assign.default.values.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Assign default values to list elements that have not been already assigned — assign.default.values","text":"x generic list ... unspecified list argument=value pairs used assign values","code":""},{"path":"/reference/assign.default.values.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Assign default values to list elements that have not been already assigned — assign.default.values","text":"x - list filled values","code":""},{"path":"/reference/assign.default.values.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Assign default values to list elements that have not been already assigned — assign.default.values","text":"Jeff Laake","code":""},{"path":"/reference/assign.par.html","id":null,"dir":"Reference","previous_headings":"","what":"Extraction and assignment of parameters to vector — assign.par","title":"Extraction and assignment of parameters to vector — assign.par","text":"Assigns parameters particular type (scale, shape, adjustments g0 (p(0))) vector parameters ddfobj. parameters kept single vector optimization even though different uses. assign.par parses vector based known structure assigns ddfobj.","code":""},{"path":"/reference/assign.par.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extraction and assignment of parameters to vector — assign.par","text":"","code":"assign.par(ddfobj, fpar)"},{"path":"/reference/assign.par.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extraction and assignment of parameters to vector — assign.par","text":"ddfobj distance sampling object (see create.ddfobj) fpar parameter vector","code":""},{"path":"/reference/assign.par.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extraction and assignment of parameters to vector — assign.par","text":"index==FALSE, vector parameters requested index==TRUE, vector 3 indices scale, shape, adjustment","code":""},{"path":"/reference/assign.par.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Extraction and assignment of parameters to vector — assign.par","text":"getpar extracts requested types ddfobj.","code":""},{"path":"/reference/assign.par.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extraction and assignment of parameters to vector — assign.par","text":"Internal functions intended called user.","code":""},{"path":[]},{"path":"/reference/assign.par.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extraction and assignment of parameters to vector — assign.par","text":"Jeff Laake","code":""},{"path":"/reference/average.line.cond.html","id":null,"dir":"Reference","previous_headings":"","what":"Average conditional detection function line for plotting — average.line.cond","title":"Average conditional detection function line for plotting — average.line.cond","text":"models covariates detection probability observation can vary. function computes average value set distances plot average line graphically represent fitted model plots compare histograms scatter individual estimated detection probabilities.","code":""},{"path":"/reference/average.line.cond.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Average conditional detection function line for plotting — average.line.cond","text":"","code":"average.line.cond(finebr, obs, model)"},{"path":"/reference/average.line.cond.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Average conditional detection function line for plotting — average.line.cond","text":"finebr set fine breaks distance detection function values averaged plotted obs value observer averaging (1-2 individual observers) model ddf model object","code":""},{"path":"/reference/average.line.cond.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Average conditional detection function line for plotting — average.line.cond","text":"list 2 elements:","code":""},{"path":"/reference/average.line.cond.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Average conditional detection function line for plotting — average.line.cond","text":"Internal function called plot functions ddf objects","code":""},{"path":"/reference/average.line.cond.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Average conditional detection function line for plotting — average.line.cond","text":"Jeff Laake","code":""},{"path":"/reference/average.line.html","id":null,"dir":"Reference","previous_headings":"","what":"Average detection function line for plotting — average.line","title":"Average detection function line for plotting — average.line","text":"models covariates detection probability observation can vary. function computes average value set distances plot average line graphically represent fitted model plots compare histograms scatter individual estimated detection probabilities. Averages calculated observed covariate combinations.","code":""},{"path":"/reference/average.line.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Average detection function line for plotting — average.line","text":"","code":"average.line(finebr, obs, model)"},{"path":"/reference/average.line.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Average detection function line for plotting — average.line","text":"finebr set fine breaks distance detection function values averaged plotted obs value observer averaging (1-2 individual observers; 3 duplicates; 4 pooled observation team) model ddf model object","code":""},{"path":"/reference/average.line.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Average detection function line for plotting — average.line","text":"list 2 elements","code":""},{"path":"/reference/average.line.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Average detection function line for plotting — average.line","text":"Internal function called plot functions ddf objects","code":""},{"path":"/reference/average.line.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Average detection function line for plotting — average.line","text":"Jeff Laake","code":""},{"path":"/reference/book.tee.data.html","id":null,"dir":"Reference","previous_headings":"","what":"Golf tee data used in chapter 6 of Advanced Distance Sampling examples — book.tee.data","title":"Golf tee data used in chapter 6 of Advanced Distance Sampling examples — book.tee.data","text":"Double platform data collected line transect survey golf tees 2 observers St. Andrews. Field sex actually colour golf tee: 0 - green; 1 - yellow. Exposure either low (0) high(1) depending height tee ground. size number tees observed cluster.","code":""},{"path":"/reference/book.tee.data.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Golf tee data used in chapter 6 of Advanced Distance Sampling examples — book.tee.data","text":"list 4 dataframes, list elements named: book.tee.dataframe, book.tee.region, book.tee.samples book.tee.obs. book.tee.dataframe distance sampling data dataframe. Used call fit detection function ddf. Contains following columns: object numeric object id observer factor representing observer 1 2 detected numeric 1 animal detected 0 otherwise distance numeric value distance animal detected size numeric value group size sex numeric value sex animal exposure numeric value exposure level 0 1 book.tee.region: region table dataframe. Used supply strata areas dht function. Contains following columns: Region.Label factor giving strata labels Area numeric value giving strata areas book.tee.samples samples table dataframe match transect ids region ids supply effort. Used dht function. Contains following columns: Sample.Label numeric giving sample / transect labels Region.Label factor giving strata labels Effort numeric value giving sample / transect lengths book.tee.obs observations table dataframe match object ids distance data transect labels. Used dht function. Contains following columns: object numeric value object id Region.Label factor giving strata labels Sample.Label numeric giving sample / transect labels","code":""},{"path":"/reference/calc.se.Np.html","id":null,"dir":"Reference","previous_headings":"","what":"Find se of average p and N — calc.se.Np","title":"Find se of average p and N — calc.se.Np","text":"Find se average p N","code":""},{"path":"/reference/calc.se.Np.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find se of average p and N — calc.se.Np","text":"","code":"calc.se.Np(model, avgp, n, average.p)"},{"path":"/reference/calc.se.Np.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find se of average p and N — calc.se.Np","text":"model ddf model object avgp average p function n sample size average.p average probability detection model","code":""},{"path":"/reference/calc.se.Np.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Find se of average p and N — calc.se.Np","text":"David L. Miller","code":""},{"path":"/reference/cdf.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"Computes cdf values observed distances fitted distribution. set observed x returns integral f(x) range= (inner, x), inner innermost distance observable (either 0 left left truncated). terms g(x) integral g(x) range divided integral g(x) entire range data (inner, W).","code":""},{"path":"/reference/cdf.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"","code":"cdf.ds(model, newdata = NULL)"},{"path":"/reference/cdf.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"model fitted distance sampling model newdata new data values computed values original observations","code":""},{"path":"/reference/cdf.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"vector cdf values observation","code":""},{"path":"/reference/cdf.ds.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"internal function intended invoked directly. called qqplot.ddf compute values Kolmogorov-Smirnov Cramer-von Mises tests Q-Q plot.","code":""},{"path":[]},{"path":"/reference/cdf.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Cumulative distribution function (cdf) for fitted distance sampling detection function — cdf.ds","text":"Jeff Laake","code":""},{"path":"/reference/cds.html","id":null,"dir":"Reference","previous_headings":"","what":"CDS function definition — cds","title":"CDS function definition — cds","text":"Creates model formula list conventional distance sampling using values supplied call ddf","code":""},{"path":"/reference/cds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"CDS function definition — cds","text":"","code":"cds( key = NULL, adj.series = NULL, adj.order = NULL, adj.scale = \"width\", adj.exp = FALSE, formula = ~1, shape.formula = ~1 )"},{"path":"/reference/cds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"CDS function definition — cds","text":"key string identifying key function (currently either \"hn\" (half-normal),\"hr\" (hazard-rate), \"unif\" (uniform) \"gamma\" (gamma distribution) adj.series string identifying adjustment functions cos (Cosine), herm (Hermite polynomials), poly (simple polynomials) NULL adj.order vector order adjustment terms include adj.scale whether scale adjustment terms \"width\" \"scale\" adj.exp TRUE uses exp(adj) adjustment keep f(x)>0 formula formula scale function (included completeness formula=~1 cds) shape.formula formula shape function","code":""},{"path":"/reference/cds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"CDS function definition — cds","text":"formula list used define detection function model fct string \"cds\" key key function string adj.series adjustment function string adj.order adjustment function orders adj.scale adjustment function scale type formula formula scale function shape.formula formula shape function","code":""},{"path":"/reference/cds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"CDS function definition — cds","text":"Jeff Laake; Dave Miller","code":""},{"path":"/reference/check.bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Check parameters bounds during optimisations — check.bounds","title":"Check parameters bounds during optimisations — check.bounds","text":"Simple internal function check optimisation hit bounds. Based code used live detfct.fit.opt.","code":""},{"path":"/reference/check.bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check parameters bounds during optimisations — check.bounds","text":"","code":"check.bounds(lt, lowerbounds, upperbounds, ddfobj, showit, setlower, setupper)"},{"path":"/reference/check.bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check parameters bounds during optimisations — check.bounds","text":"lt optimisation object lowerbounds current lower bounds upperbounds current upper bounds ddfobj ddf object showit debug level setlower lower bounds set user setupper upper bounds set user","code":""},{"path":"/reference/check.bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check parameters bounds during optimisations — check.bounds","text":"TRUE parameters close bound, else FALSE","code":""},{"path":"/reference/check.bounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check parameters bounds during optimisations — check.bounds","text":"Dave Miller; Jeff Laake","code":""},{"path":"/reference/check.mono.html","id":null,"dir":"Reference","previous_headings":"","what":"Check that a detection function is monotone — check.mono","title":"Check that a detection function is monotone — check.mono","text":"Check fitted detection function monotone non-increasing.","code":""},{"path":"/reference/check.mono.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check that a detection function is monotone — check.mono","text":"","code":"check.mono( df, strict = TRUE, n.pts = 100, tolerance = 1e-08, plot = FALSE, max.plots = 6 )"},{"path":"/reference/check.mono.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check that a detection function is monotone — check.mono","text":"df fitted detection function object strict TRUE (default) detection function must \"strictly\" monotone, (g(x[])<=g(x[-1])) whole range (left right truncation points). n.pts number equally-spaced points left right truncation evaluate detection function (default 100) tolerance numerical tolerance monotonicity checks (default 1e-8) plot plot diagnostic highlighting non-monotonic areas (default FALSE) max.plots plot=TRUE, maximum number plots non-monotone covariate combinations plotted? Plotted combinations random sample non-monotonic subset evaluations. effect non-covariate models.","code":""},{"path":"/reference/check.mono.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check that a detection function is monotone — check.mono","text":"TRUE detection function monotone, FALSE . warnings issued warn user function non-monotonic.","code":""},{"path":"/reference/check.mono.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Check that a detection function is monotone — check.mono","text":"Evaluates series points range detection function (left right truncation) determines: 1. detection function always less equal value left truncation (g(x)<=g(left), usually g(x)<=g(0)). 2. (Optionally) detection function always monotone decreasing (g(x[])<=g(x[-1])). check performed strict=TRUE (default). 3. detection function never less 0 (g(x)>=0). 4. detection function never greater 1 (g(x)<=1). models covariates scale parameter detection function evaluated observed covariate combinations. Currently covariates shape parameter supported.","code":""},{"path":"/reference/check.mono.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check that a detection function is monotone — check.mono","text":"David L. Miller, Felix Petersma","code":""},{"path":"/reference/coef.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract coefficients — coef.ds","title":"Extract coefficients — coef.ds","text":"Extract coefficients provide summary parameters estimates output ddf model objects.","code":""},{"path":"/reference/coef.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract coefficients — coef.ds","text":"","code":"# S3 method for class 'ds' coef(object,...) # S3 method for class 'io' coef(object,...) # S3 method for class 'io.fi' coef(object,...) # S3 method for class 'trial' coef(object,...) # S3 method for class 'trial.fi' coef(object,...) # S3 method for class 'rem' coef(object,...) # S3 method for class 'rem.fi' coef(object,...)"},{"path":"/reference/coef.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract coefficients — coef.ds","text":"object ddf model object class ds, io, io.fi, trial, trial.fi, rem, rem.fi. ... unspecified arguments unused present","code":""},{"path":"/reference/coef.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract coefficients — coef.ds","text":"coef.ds List data frames coefficients (scale exponent (hazard)) scale dataframe scale coefficient estimates standard errors exponent dataframe exponent estimate standard error hazard detection function others Data frame containing coefficient standard error","code":""},{"path":"/reference/coef.ds.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extract coefficients — coef.ds","text":"functions called generic function coef ddf model object. can called directly user, typically safest use coef calls appropriate function based type model.","code":""},{"path":"/reference/coef.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract coefficients — coef.ds","text":"Jeff Laake","code":""},{"path":"/reference/compute.Nht.html","id":null,"dir":"Reference","previous_headings":"","what":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"Compute individual components Horvitz-Thompson abundance estimate covered region particular subset data depending value group = TRUE (group abundance); FALSE(individual abundance)","code":""},{"path":"/reference/compute.Nht.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"","code":"compute.Nht(pdot, group = TRUE, size = NULL)"},{"path":"/reference/compute.Nht.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"pdot vector estimated detection probabilities group TRUE (group abundance); FALSE(individual abundance) size vector group size values clustered populations","code":""},{"path":"/reference/compute.Nht.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"vector H-T components abundance estimate","code":""},{"path":"/reference/compute.Nht.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"Internal function called covered.region.dht","code":""},{"path":"/reference/compute.Nht.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Horvitz-Thompson estimates 1/p_i or s_i/p_i — compute.Nht","text":"Jeff Laake","code":""},{"path":"/reference/covered.region.dht.html","id":null,"dir":"Reference","previous_headings":"","what":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"Computes H-T abundance within covered region sample.","code":""},{"path":"/reference/covered.region.dht.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"","code":"covered.region.dht(obs, samples, group)"},{"path":"/reference/covered.region.dht.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"obs observations table samples samples table group TRUE compute abundance group otherwise abundance individuals","code":""},{"path":"/reference/covered.region.dht.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"Nhat..sample - dataframe abundance sample","code":""},{"path":"/reference/covered.region.dht.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"Internal function called dht related functions","code":""},{"path":"/reference/covered.region.dht.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Covered region estimate of abundance from Horvitz-Thompson-like estimator — covered.region.dht","text":"Jeff Laake","code":""},{"path":"/reference/create.bins.html","id":null,"dir":"Reference","previous_headings":"","what":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","title":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","text":"internal routine necessary normal analyses.","code":""},{"path":"/reference/create.bins.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","text":"","code":"create.bins(data, cutpoints)"},{"path":"/reference/create.bins.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","text":"data `data.frame` least column `distance`. cutpoints vector cutpoints bins","code":""},{"path":"/reference/create.bins.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","text":"argument `data` two extra columns `distbegin` `distend`.","code":""},{"path":"/reference/create.bins.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create bins from a set of binned distances and a set of cutpoints. — create.bins","text":"David L. Miller","code":""},{"path":"/reference/create.command.file.html","id":null,"dir":"Reference","previous_headings":"","what":"create.command.file — create.command.file","title":"create.command.file — create.command.file","text":"create.command.file","code":""},{"path":"/reference/create.command.file.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"create.command.file — create.command.file","text":"","code":"create.command.file(dsmodel = call(), data, method, meta.data, control)"},{"path":"/reference/create.command.file.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"create.command.file — create.command.file","text":"dsmodel distance sampling model specification data dataframe containing data analyzed method analysis method meta.data list containing settings controlling data structure control list containing settings controlling model fitting","code":""},{"path":"/reference/create.command.file.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"create.command.file — create.command.file","text":"Jonah McArthur","code":""},{"path":"/reference/create.ddfobj.html","id":null,"dir":"Reference","previous_headings":"","what":"Create detection function object — create.ddfobj","title":"Create detection function object — create.ddfobj","text":"Creates populates specific list structure define detection function object data. ddfobj used throughout package calling argument various functions.","code":""},{"path":"/reference/create.ddfobj.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create detection function object — create.ddfobj","text":"","code":"create.ddfobj(model, xmat, meta.data, initial)"},{"path":"/reference/create.ddfobj.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create detection function object — create.ddfobj","text":"model model list key function possibly adjustment functions, scale formula, shape formula xmat model data frame meta.data list options describing data like width, etc initial named list initial values parameters detection function (least \"scale\", maybe also \"shape\" \"adjustments\")","code":""},{"path":"/reference/create.ddfobj.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create detection function object — create.ddfobj","text":"Distance sampling function object list elements can null except type: type type detection function hn, hr, gamma, unif, logistic xmat model data frame intercept.TRUE scale = ~1 shape formula =~1 scale sublist elements (can NULL .e., unif key):formula, parameters, design matrix (dm) shape sublist elements (power hazard rate gamma) (can NULL .e., unif hn key):formula, parameters, design matrix (dm) adjustment sublist elements (NULL adjustments used):series,order,scale,parameters g0 sublist elements (used present):formula,parameters, design matrix(dm), link","code":""},{"path":"/reference/create.ddfobj.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create detection function object — create.ddfobj","text":"Internal function meant called user","code":""},{"path":[]},{"path":"/reference/create.ddfobj.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create detection function object — create.ddfobj","text":"Jeff Laake","code":""},{"path":"/reference/create.model.frame.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a model frame for ddf fitting — create.model.frame","title":"Create a model frame for ddf fitting — create.model.frame","text":"Creates model.frame distance detection function fitting. includes pre-specified computed variables included model specified user (formula)","code":""},{"path":"/reference/create.model.frame.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a model frame for ddf fitting — create.model.frame","text":"","code":"create.model.frame(xmat, scale.formula, meta.data, shape.formula = NULL)"},{"path":"/reference/create.model.frame.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a model frame for ddf fitting — create.model.frame","text":"xmat dataframe ddf scale.formula user specified formula scale distance detection function meta.data user-specified meta.data (see ddf shape.formula user specified formula shape parameter distance detection function","code":""},{"path":"/reference/create.model.frame.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a model frame for ddf fitting — create.model.frame","text":"model frame analysis","code":""},{"path":"/reference/create.model.frame.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a model frame for ddf fitting — create.model.frame","text":"following fields always included: detected, observer, binned, optionally distance (unless null), timesdetected (present data). distance data binned, include distbegin distend point fields. integration width varies also include int.begin int.end include offset field iterative glm, used. Beyond fields fields used model formula included.","code":""},{"path":"/reference/create.model.frame.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create a model frame for ddf fitting — create.model.frame","text":"Internal function called user","code":""},{"path":"/reference/create.model.frame.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a model frame for ddf fitting — create.model.frame","text":"Jeff Laake","code":""},{"path":"/reference/create.varstructure.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates structures needed to compute abundance and variance — create.varstructure","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"Creates samples obs dataframes used compute abundance variance based structure geographic regions samples within region. intent generalize routine work sampling structures.","code":""},{"path":"/reference/create.varstructure.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"","code":"create.varstructure(model, region, sample, obs, dht.se)"},{"path":"/reference/create.varstructure.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"model fitted ddf object region region table sample sample table obs table object #'s links sample region table dht.se uncertainty going calculated later?","code":""},{"path":"/reference/create.varstructure.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"List 2 elements: samples merged dataframe containing region sample info - one record per sample obs merged observation data links region samples","code":""},{"path":"/reference/create.varstructure.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"function performs following tasks: 1)tests make sure region labels unique, 2) merges sample region tables samples table issue warning samples used, 3) regions samples values Area valid areas given issue error stop, error given code stops, 4) creates unique region/sample label samples obs, 5) merges observations sample issues warning observations used, 6) sorts regions label merges values predictions fitted model based object number limits data appropriate fitted detection function.","code":""},{"path":"/reference/create.varstructure.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"Internal function called dht","code":""},{"path":"/reference/create.varstructure.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates structures needed to compute abundance and variance — create.varstructure","text":"Jeff Laake","code":""},{"path":"/reference/ddf.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"Fits conventional distance sampling (CDS) (likelihood eq 6.6 Laake Borchers 2004) multi-covariate distance sampling (MCDS)(likelihood eq 6.14 Laake Borchers 2004) model detection function observed distance data. uses key functions incorporate adjustment functions CDS/MCDS analysis engines DISTANCE (Marques Buckland 2004). Distance can grouped (binned), ungrouped (unbinned) mixture two. function called directly user called ddf,ddf.io, ddf.trial.","code":""},{"path":"/reference/ddf.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"","code":"# S3 method for class 'ds' ddf( dsmodel, mrmodel = NULL, data, method = \"ds\", meta.data = list(), control = list(), call )"},{"path":"/reference/ddf.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"dsmodel model list key function scale formula mrmodel used data data.frame; see ddf details method analysis method; needed function called ddf.io ddf.trial meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call function called directly ddf (e.g., called via ddf.io)","code":""},{"path":"/reference/ddf.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"result: ds model object","code":""},{"path":"/reference/ddf.ds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"complete description calling arguments, see ddf. argument model function dsmodel ddf. argument dataname name dataframe specified argument data ddf. arguments control,meta.data,method defined ddf.","code":""},{"path":"/reference/ddf.ds.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"mixture binned unbinned distance, width must set >= largest interval endpoint; changed complicated analysis; likewise, binned bins overlap, must also hold; bins overlap, width must one interval endpoints; holds left truncation Although mixture analysis works principle tested via simulation.","code":""},{"path":"/reference/ddf.ds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press. Marques, F.F.C. S.T. Buckland. 2004. Covariate models detection function. : Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"Jeff Laake","code":""},{"path":"/reference/ddf.ds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"CDS/MCDS Distance Detection Function Fitting — ddf.ds","text":"","code":"# ddf.ds is called when ddf is called with method=\"ds\" # \\donttest{ data(book.tee.data) region <- book.tee.data$book.tee.region egdata <- book.tee.data$book.tee.dataframe samples <- book.tee.data$book.tee.samples obs <- book.tee.data$book.tee.obs result <- ddf(dsmodel = ~mcds(key = \"hn\", formula = ~1), data = egdata[egdata$observer==1, ], method = \"ds\", meta.data = list(width = 4)) summary(result,se=TRUE) #> #> Summary for ds object #> Number of observations : 124 #> Distance range : 0 - 4 #> AIC : 311.1385 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 0.6632435 0.09981249 #> #> Estimate SE CV #> Average p 0.5842744 0.04637627 0.07937412 #> N in covered region 212.2290462 20.85130344 0.09824906 plot(result,main=\"cds - observer 1\") print(dht(result,region,samples,obs,options=list(varflag=0,group=TRUE), se=TRUE)) #> Abundance and density estimates from distance sampling #> Variance : R2, binomial #> #> Summary statistics #> #> Region Area CoveredArea Effort n k ER se.ER cv.ER #> 1 1 1040 1040 130 72 6 0.5538462 0.02926903 0.05284685 #> 2 2 640 640 80 52 5 0.6500000 0.08292740 0.12758061 #> 3 Total 1680 1680 210 124 11 0.5904762 0.03641856 0.06167659 #> #> Summary for clusters #> #> Abundance: #> Region Estimate se cv lcl ucl df #> 1 1 123.22977 13.54083 0.10988275 99.41771 152.7452 0 #> 2 2 88.99928 10.64090 0.11956159 70.46547 112.4078 0 #> 3 Total 212.22905 20.85130 0.09824906 175.13617 257.1780 0 #> #> Density: #> Region Estimate se cv lcl ucl df #> 1 1 0.1184902 0.01302002 0.10988275 0.09559396 0.1468704 0 #> 2 2 0.1390614 0.01662640 0.11956159 0.11010230 0.1756372 0 #> 3 Total 0.1263268 0.01241149 0.09824906 0.10424772 0.1530821 0 #> #> Summary for individuals #> #> Abundance: #> Region Estimate se cv lcl ucl df #> 1 1 391.9391 46.10793 0.1176405 311.4775 493.1858 0 #> 2 2 260.1517 33.65581 0.1293699 202.0987 334.8806 0 #> 3 Total 652.0909 67.40510 0.1033677 532.7888 798.1070 0 #> #> Density: #> Region Estimate se cv lcl ucl df #> 1 1 0.3768645 0.04433455 0.1176405 0.2994976 0.4742171 0 #> 2 2 0.4064871 0.05258720 0.1293699 0.3157792 0.5232509 0 #> 3 Total 0.3881493 0.04012208 0.1033677 0.3171362 0.4750637 0 #> #> Expected cluster size #> Region Expected.S se.Expected.S cv.Expected.S #> 1 1 3.180556 0.13362415 0.04201283 #> 2 2 2.923077 0.14443673 0.04941257 #> 3 Total 3.072581 0.09870565 0.03212467 print(ddf.gof(result)) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> [0,0.364] (0.364,0.727] (0.727,1.09] (1.09,1.45] (1.45,1.82] #> Observed 25.000 13.000 12.000 22.000 12.000 #> Expected 19.181 18.522 17.270 15.549 13.518 #> Chisquare 1.765 1.646 1.608 2.677 0.170 #> (1.82,2.18] (2.18,2.55] (2.55,2.91] (2.91,3.27] (3.27,3.64] (3.64,4] #> Observed 8.000 12.000 7.000 8.000 4.000 1.000 #> Expected 11.348 9.199 7.200 5.442 3.972 2.799 #> Chisquare 0.988 0.853 0.006 1.202 0.000 1.156 #> Total #> Observed 124.000 #> Expected 124.000 #> Chisquare 12.071 #> #> P = 0.20932 with 9 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.0655753 p-value = 0.77897 # }"},{"path":"/reference/ddf.gof.html","id":null,"dir":"Reference","previous_headings":"","what":"Goodness of fit tests for distance sampling models — ddf.gof","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"Generic function computes chi-square goodness fit test detection function models binned data Cramer-von Mises Kolmogorov-Smirnov (ks=TRUE)tests exact distance data. default Q-Q plot generated exact data (can suppressed using qq=FALSE argument).","code":""},{"path":"/reference/ddf.gof.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"","code":"ddf.gof( model, breaks = NULL, nc = NULL, qq = TRUE, nboot = 100, ks = FALSE, ... )"},{"path":"/reference/ddf.gof.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"model model object breaks Cutpoints use binning data nc Number distance classes qq Flag indicate whether quantile-quantile plot desired nboot number replicates use calculate p-values Kolmogorov-Smirnov goodness fit test statistics ks perform Kolmogorov-Smirnov test (involves many bootstraps can take ) ... Graphics parameters pass qqplot function","code":""},{"path":"/reference/ddf.gof.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"List class ddf.gof containing chi-square Goodness fit test statistic df Degrees freedom associated test statistic p-value Significance level test statistic","code":""},{"path":"/reference/ddf.gof.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"Formal goodness fit testing detection function models using Kolmogorov-Smirnov Cramer-von Mises tests. tests based looking quantile-quantile plot produced qqplot.ddf deviations line x=y. Kolmogorov-Smirnov test asks question \"largest vertical distance point y=x line?\" uses distance statistic test null hypothesis samples (EDF CDF case) distribution (hence model fits well). deviation y=x line points large reject null hypothesis say model good fit. Rather looking single biggest difference y=x line points Q-Q plot, might prefer think differences line points, since may many smaller differences want take account rather looking one large deviation. null hypothesis , statistic uses sum deviations point line. Note bootstrap procedure required Kolmogorov-Smirnov test ensure p-values procedure correct comparing cumulative distribution function (CDF) empirical distribution function (EDF) estimated parameters detection function. nboot parameter controls number bootstraps use. Set 0 avoid computing bootstraps (much faster Kolmogorov-Smirnov results, course). One can change precision printed values using print.ddf.gof method's digits argument.","code":""},{"path":[]},{"path":"/reference/ddf.gof.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Goodness of fit tests for distance sampling models — ddf.gof","text":"Jeff Laake","code":""},{"path":"/reference/ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"Distance Detection Function Fitting — ddf","title":"Distance Detection Function Fitting — ddf","text":"Generic function fitting detection functions distance sampling single double observer configurations. Independent observer, trial dependent observer (removal) configurations included. generic function little validate calling arguments methods calls appropriate method specific function analysis.","code":""},{"path":"/reference/ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Distance Detection Function Fitting — ddf","text":"","code":"ddf( dsmodel = call(), mrmodel = call(), data, method = \"ds\", meta.data = list(), control = list(), call = NULL )"},{"path":"/reference/ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Distance Detection Function Fitting — ddf","text":"dsmodel distance sampling model specification mrmodel mark-recapture model specification data dataframe containing data analyzed method analysis method meta.data list containing settings controlling data structure control list containing settings controlling model fitting call implemented top level ddf function, set ddf passed ddf generics.","code":""},{"path":"/reference/ddf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Distance Detection Function Fitting — ddf","text":"model object class=(method, \"ddf\")","code":""},{"path":"/reference/ddf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Distance Detection Function Fitting — ddf","text":"fitting code certain expectations data. dataframe least following fields named defined follows: data clustered objects, dataframe also contain field named size gives observed number cluster. data double observer survey, two records observation object number. code assumes observations listed order observer data subsetted observer number records subset object order. addition predefined pre-named fields, dataframe can number type fields used covariates dsmodel mrmodel. present, discrepancies observations distance, size user-specified covariates assimilated uncertainty estimate. code presumes values fields records (observer=1 observer=2) uses value observer 1. Thus makes sense make values records pair even detect object observer 1 detect object data taken observer 2 consistent. Five different fitting methods currently available turn define whether dsmodel mrmodel need defined. Methods suffix \".fi\" use assumption full independence use distance sampling portion likelihood dsmodel needed. mrmodel needed double observer surveys thus needed method ds. dsmodel specifies detection function g(y) distance sampling data models restrict g(0)=1. single observer data g(y) detection function single observer double observer survey relative detection function (assuming g(0)=1) observers team (unique observations observers). double observer surveys, detection function p(y)=p(0)g(y) p(0)<1. detection function g(y) specified dsmodel p(0) estimated conditional detection functions (see mrmodel ). value dsmodel specified using hybrid formula/function notation. model definition prefixed ~ remainder function definition specified arguments. present two different functions, cds mcds, conventional distance sampling multi-covariate distance sampling. functions required arguments (key,formula). first specifies key function can half-normal (\"hn\"), hazard-rate (\"hr\"), gamma (\"gamma\") uniform (\"unif\"). argument formula specifies formula log scale parameter key function (e.g., equivalent standard deviation half-normal). variable distance included formula scale distance. See Marques, F.F.C. S.T. Buckland (2004) details representation scale formula. hazard rate gamma functions, additional shape.formula can specified model shape parameter. default ~1. Adjustment terms can specified setting adj.series can values: \"none\", \"cos\" (cosine), \"poly\" (polynomials), \"herm\" (Hermite polynomials). One must also specify vector orders adjustment terms (adj.order) scaling (adj.scale) may \"width\" \"scale\" (scaling scale parameter). Note uniform key can used adjustments (usually cosine adjustments Fourier-type analysis). mrmodel specifies form conditional detection functions (.e.,probability seen observer j given seen observer 3-j) observer (j=1,2) double observer survey. value specified using mix formula/function notation case functions glm gam. arguments functions formula link. present, glm allowed restricted link=logit. Thus, currently form conditional detection functions logistic expressed eq 6.32 Laake Borchers (2004). contrast dsmodel, argument formula typically include distance covariates affect detection probability. example, mrmodel=~glm(formula=~distance+size+sex) constructs conditional detection function based logistic form additive factors, distance, size, sex. another example, mrmodel=~glm(formula=~distance*size+sex) constructs model added interaction distance size. argument meta.data list enables various options data set. options include: point TRUE data point counts FALSE (default) implies line transect data width distance specifying half-width transect left distance specifying inner truncation value binned TRUE FALSE specify whether distances binned analysis breaks binned=TRUE, required sequence break points used plotting/gof. match distbegin, distend values bins fixed int.range integration range detection probability; either vector 2 matrix 2 columns mono constrain detection function weakly monotonically decreasing (applicable covariates detection function) mono.strict TRUE constrain detection function strictly monotonically decreasing (, applicable covariates detection function) Using meta.data=list(int.range=c(1,10)) meta.data=list(left=1,width=10). meta.data=list(binned=TRUE) used, dataframe needs contain fields distbegin distend observation specify left right hand end points distance interval containing observation. general data structure allows intervals change rather fixed standard distance analysis tools. Typically, intervals changing integration range. example, assume distance bins generated using fixed angular measurements aircraft altitude varying. analyses truncated (.e., last interval go infinity), transect width (left truncation point blindspot aircraft) can potentially change observation. argument int.range can also entered matrix 2 columns (left width) row observation. argument control list enables various analysis options set. necessary set analyses. provided user can optionally see intermediate fitting output control fitting algorithm converge happens infrequently. list values include: showit Integer (0-3, default 0) controls (increasing)amount information printed fitting. 0 - none, >=1 - information refitting bound changes printed, >=2 - information adjustment term fitting printed, ==3 -per-iteration parameter estimates log-likelihood printed. estimate FALSE fits model estimate predicted probabilities refit TRUE algorithm attempt multiple optimizations different starting values converge nrefits number refitting attempts initial named list starting values dsmodel parameters (e.g. $scale, $shape, $adjustment) lowerbounds vector lowerbounds dsmodel parameters order ds parameters appear par element ddf object, .e. fit.ddf$par fit.ddf fitted ddf model. upperbounds vector upperbounds dsmodel parameters order ds parameters appear par element ddf object, .e. fit.ddf$par fit.ddf fitted ddf model. limit TRUE restrict analysis observations detected=1 debug TRUE, fitting fails, return object fitting information nofit TRUE fit model, use starting values generate object based values optimx.method one (vector ) string(s) giving optimisation method use. one supplied, results one used starting values next. See optimx optimx.maxit maximum number iterations use optimisation. mono.random.start default monotonicity constraints enforced, grid starting values tested. Instead random starting values can used (uniformly distributed upper lower bounds). Set TRUE random start, FALSE (default) uses grid method mono.method optimiser method used (strict) monotonicity enforced. Can either slsqp solnp. Default slsqp. mono.startvals Controls mono.optimiser find better starting values first fitting key function without adjustments, use start values key function parameters fitting key + adjustment series detection function. Defaults FALSE mono.outer.iter Number outer iterations used solnp fitting monotonic model solnp selected. Default 200. silent silences warnings within ds fitting method (helpful running many times without generating many warning/error messages). optimizer default set '' single observer analyses 'R' double observer analyses. single observer analyses optimizer = '', R optimizer used present MCDS optimizer also used. result best likelihood value selected. run specified optimizer set value either 'R' 'MCDS'. MCDS optimizer currently used detection function fitting double observer analyses. See mcds_dot_exe information. winebin Location wine binary used run MCDS.exe. See mcds_dot_exe information. Examples distance sampling analyses available https://examples.distancesampling.org/. Hints tips fitting (particularly optimisation issues) mrds_opt manual page.","code":""},{"path":"/reference/ddf.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Distance Detection Function Fitting — ddf","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press. Marques, F.F.C. S.T. Buckland. 2004. Covariate models detection function. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Distance Detection Function Fitting — ddf","text":"Jeff Laake","code":""},{"path":"/reference/ddf.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Distance Detection Function Fitting — ddf","text":"","code":"# load data data(book.tee.data) region <- book.tee.data$book.tee.region egdata <- book.tee.data$book.tee.dataframe samples <- book.tee.data$book.tee.samples obs <- book.tee.data$book.tee.obs # fit a half-normal detection function result <- ddf(dsmodel=~mcds(key=\"hn\", formula=~1), data=egdata, method=\"ds\", meta.data=list(width=4)) # fit an independent observer model with full independence result.io.fi <- ddf(mrmodel=~glm(~distance), data=egdata, method=\"io.fi\", meta.data=list(width = 4)) # fit an independent observer model with point independence result.io <- ddf(dsmodel=~cds(key = \"hn\"), mrmodel=~glm(~distance), data=egdata, method=\"io\", meta.data=list(width=4)) if (FALSE) { # \\dontrun{ # simulated single observer point count data (see ?ptdata.single) data(ptdata.single) ptdata.single$distbegin <- (as.numeric(cut(ptdata.single$distance, 10*(0:10)))-1)*10 ptdata.single$distend <- (as.numeric(cut(ptdata.single$distance, 10*(0:10))))*10 model <- ddf(data=ptdata.single, dsmodel=~cds(key=\"hn\"), meta.data=list(point=TRUE,binned=TRUE,breaks=10*(0:10))) summary(model) plot(model,main=\"Single observer binned point data - half normal\") model <- ddf(data=ptdata.single, dsmodel=~cds(key=\"hr\"), meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10))) summary(model) plot(model, main=\"Single observer binned point data - hazard rate\") dev.new() # simulated double observer point count data (see ?ptdata.dual) # setup data data(ptdata.dual) ptdata.dual$distbegin <- (as.numeric(cut(ptdata.dual$distance, 10*(0:10)))-1)*10 ptdata.dual$distend <- (as.numeric(cut(ptdata.dual$distance, 10*(0:10))))*10 model <- ddf(method=\"io\", data=ptdata.dual, dsmodel=~cds(key=\"hn\"), mrmodel=~glm(formula=~distance*observer), meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10))) summary(model) plot(model, main=\"Dual observer binned point data\", new=FALSE, pages=1) model <- ddf(method=\"io\", data=ptdata.dual, dsmodel=~cds(key=\"unif\", adj.series=\"cos\", adj.order=1), mrmodel=~glm(formula=~distance*observer), meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10))) summary(model) par(mfrow=c(2,3)) plot(model,main=\"Dual observer binned point data\",new=FALSE) } # }"},{"path":"/reference/ddf.io.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"Mark-Recapture Analysis Independent Observer Configuration Full Independence","code":""},{"path":"/reference/ddf.io.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"","code":"# S3 method for class 'io.fi' ddf( dsmodel = NULL, mrmodel, data, method, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.io.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"dsmodel used mrmodel mark-recapture model specification data analysis dataframe method analysis method; needed function called ddf.io meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.io.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"result: io.fi model object","code":""},{"path":"/reference/ddf.io.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"mark-recapture data derived independent observer distance sampling survey can used derive conditional detection functions (p_j(y)) observers (j=1,2). conditional detection functions detection probability observer j based seeing seeing observations made observer 3-j. Thus, p_1(y) estimated p_1|2(y). detections observers independent (full independence) p_1(y)=p_1|2(y),p_2(y)=p_2|1(y) union, full independence means p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) distance y. fitting detection functions likelihood given eq 6.8 6.16 Laake Borchers (2004) used. analysis require usual distance sampling assumption perpendicular distances uniformly distributed based line placement random relative animal distribution. However, assumption used computing predicted detection probability averaged based uniform distribution (see eq 6.11 Laake Borchers 2004). complete description calling arguments, see ddf. argument model function mrmodel ddf. argument dataname name dataframe specified argument data ddf. arguments control,meta.data,method defined ddf.","code":""},{"path":"/reference/ddf.io.fi.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.io.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (MRDS) IO - FI — ddf.io.fi","text":"Jeff Laake","code":""},{"path":"/reference/ddf.io.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"Mark-Recapture Distance Sampling (MRDS) Analysis Independent Observer Configuration Point Independence","code":""},{"path":"/reference/ddf.io.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"","code":"# S3 method for class 'io' ddf( dsmodel, mrmodel, data, method = NULL, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.io.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"dsmodel distance sampling model specification; model list key function scale formula mrmodel mark-recapture model specification; model list formula link data analysis dataframe method used meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.io.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"result: io model object composed io.fi ds model objects","code":""},{"path":"/reference/ddf.io.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"MRDS analysis based point independence involves two separate independent analyses mark-recapture data distance sampling data. independent observer configuration, mark-recapture data analysed call ddf.io.fi (see likelihood eq 6.8 6.16 Laake Borchers 2004) fit conditional distance sampling detection functions estimate p(0), detection probability distance zero independent observer team based independence zero (eq 6.22 Laake Borchers 2004). Independently, distance data, union observations independent observers, used fit conventional distance sampling (CDS) (likelihood eq 6.6) multi-covariate distance sampling (MCDS) (likelihood eq 6.14) model detection function, g(y), g(0)=1. detection function observer team created p(y)=p(0)*g(y) (eq 6.28 Laake Borchers 2004) predictions made. ddf.io called directly user called ddf method=\"io\". complete description calling arguments, see ddf. argument dataname name dataframe specified argument data ddf. arguments dsmodel, mrmodel, control meta.data defined ddf.","code":""},{"path":"/reference/ddf.io.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.io.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (MRDS) IO - PI — ddf.io","text":"Jeff Laake","code":""},{"path":"/reference/ddf.rem.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"Mark-Recapture Distance Sampling (MRDS) Analysis Removal Observer Configuration Full Independence","code":""},{"path":"/reference/ddf.rem.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"","code":"# S3 method for class 'rem.fi' ddf( dsmodel = NULL, mrmodel, data, method, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.rem.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"dsmodel used mrmodel mark-recapture model specification data analysis dataframe method analysis method; needed function called ddf.io meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.rem.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"result: rem.fi model object","code":""},{"path":"/reference/ddf.rem.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"mark-recapture data derived removal observer distance sampling survey can derive conditional detection functions (p_j(y)) observers (j=1) technically assumes detection probability vary occasion (observer case). conditional detection function detection probability observer 1 conditional observations seen either observers. Thus, p_1(y) estimated p_1|2(y). detections observers independent (full independence) p_1(y)=p_1|2(y) union, full independence means p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) distance y. fitting detection functions likelihood Laake Borchers (2004) used. analysis require usual distance sampling assumption perpendicular distances uniformly distributed based line placement random relative animal distribution. However, assumption used computing predicted detection probability averaged based uniform distribution (see eq 6.11 Laake Borchers 2004). complete description calling arguments, see ddf. argument model function mrmodel ddf. argument dataname name dataframe specified argument data ddf. arguments control,meta.data,method defined ddf.","code":""},{"path":"/reference/ddf.rem.fi.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.rem.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (MRDS) Removal - FI — ddf.rem.fi","text":"Jeff Laake","code":""},{"path":"/reference/ddf.rem.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"Mark-Recapture Distance Sampling (MRDS) Analysis Removal Observer Configuration Point Independence","code":""},{"path":"/reference/ddf.rem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"","code":"# S3 method for class 'rem' ddf( dsmodel, mrmodel, data, method = NULL, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.rem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"dsmodel distance sampling model specification; model list key function scale formula mrmodel mark-recapture model specification; model list formula link data analysis dataframe method used meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.rem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"result: rem model object composed rem.fi ds model objects","code":""},{"path":"/reference/ddf.rem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"MRDS analysis based point independence involves two separate independent analyses mark-recapture data distance sampling data. removal observer configuration, mark-recapture data analysed call ddf.rem.fi (see Laake Borchers 2004) fit conditional distance sampling detection functions estimate p(0), detection probability distance zero primary observer based independence zero (eq 6.22 Laake Borchers 2004). Independently, distance data, observations primary observer, used fit conventional distance sampling (CDS) (likelihood eq 6.6) multi-covariate distance sampling (MCDS) (likelihood eq 6.14) model detection function, g(y), g(0)=1. detection function primary observer created p(y)=p(0)*g(y) (eq 6.28 Laake Borchers 2004) predictions made. ddf.rem called directly user called ddf method=\"rem\". complete description calling arguments, see ddf. argument data dataframe specified argument data ddf. arguments dsmodel, mrmodel, control meta.data defined ddf.","code":""},{"path":"/reference/ddf.rem.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.rem.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (MRDS) Removal - PI — ddf.rem","text":"Jeff Laake","code":""},{"path":"/reference/ddf.trial.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"Mark-Recapture Analysis Trial Observer Configuration Full Independence","code":""},{"path":"/reference/ddf.trial.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"","code":"# S3 method for class 'trial.fi' ddf( dsmodel = NULL, mrmodel, data, method, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.trial.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"dsmodel used mrmodel mark-recapture model specification data analysis dataframe method analysis method; needed function called ddf.trial meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.trial.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"result: trial.fi model object","code":""},{"path":"/reference/ddf.trial.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"mark-recapture data derived trial observer distance sampling survey can used derive conditional detection function (p_1(y)) observer 1 based trials (observations) observer 2. conditional detection function detection probability observer 1 based seeing seeing observations made observer 2. Thus, p_1(y) estimated p_1|2(y). detections observers independent (full independence) p_1(y)=p_1|2(y) distance y. fitting detection functions likelihood given eq 6.12 6.17 Laake Borchers (2004) used. analysis require usual distance sampling assumption perpendicular distances uniformly distributed based line placement random relative animal distribution. However, assumption used computing predicted detection probability averaged based uniform distribution (see eq 6.13 Laake Borchers 2004). complete description calling arguments, see ddf. argument model function mrmodel ddf. argument dataname name dataframe specified argument data ddf. arguments control,meta.data,method defined ddf.","code":""},{"path":"/reference/ddf.trial.fi.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.trial.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Analysis of Trial Configuration - FI — ddf.trial.fi","text":"Jeff Laake","code":""},{"path":"/reference/ddf.trial.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"Mark-Recapture Distance Sampling (MRDS) Analysis Trial Observer Configuration Point Independence","code":""},{"path":"/reference/ddf.trial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"","code":"# S3 method for class 'trial' ddf( dsmodel, mrmodel, data, method = NULL, meta.data = list(), control = list(), call = \"\" )"},{"path":"/reference/ddf.trial.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"dsmodel distance sampling model specification; model list key function scale formula mrmodel mark-recapture model specification; model list formula link data analysis data.frame method used meta.data list containing settings controlling data structure control list containing settings controlling model fitting call original function call used call ddf","code":""},{"path":"/reference/ddf.trial.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"result: trial model object composed trial.fi ds model objects","code":""},{"path":"/reference/ddf.trial.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"MRDS analysis based point independence involves two separate independent analyses mark-recapture data distance sampling data. trial configuration, mark-recapture data analysed call ddf.trial.fi (see likelihood eq 6.12 6.17 Laake Borchers 2004) fit conditional distance sampling detection function observer 1 based trials (observations) observer 2 estimate p_1(0), detection probability distance zero observer 1. Independently, distance data observer 1 used fit conventional distance sampling (CDS) (likelihood eq 6.6) multi-covariate distance sampling (MCDS) (likelihood eq 6.14) model detection function, g(y), g(0)=1. detection function observer 1 created p_1(y)=p_1(0)*g(y) (eq 6.28 Laake Borchers 2004) predictions made. ddf.trial called directly user called ddf method=\"trial\". complete description calling arguments, see ddf. argument dataname name dataframe specified argument data ddf. arguments dsmodel, mrmodel, control meta.data defined ddf.","code":""},{"path":"/reference/ddf.trial.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"Laake, J.L. D.L. Borchers. 2004. Methods incomplete detection distance zero. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/ddf.trial.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI — ddf.trial","text":"Jeff Laake","code":""},{"path":"/reference/DeltaMethod.html","id":null,"dir":"Reference","previous_headings":"","what":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"Computes delta method variance-covariance matrix results generic function fct computes vector estimates function set estimated parameters par.","code":""},{"path":"/reference/DeltaMethod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"","code":"DeltaMethod(par, fct, vcov, delta, ...)"},{"path":"/reference/DeltaMethod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"par vector parameter values estimates constructed fct function constructs estimates parameters par vcov variance-covariance matrix parameters delta proportional change parameters used numerically estimate first derivative central-difference formula (ignored) ... additional arguments needed fct","code":""},{"path":"/reference/DeltaMethod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"list values variance estimated variance-covariance matrix estimates derived fct partial matrix (vector) partial derivatives fct respect parameters par","code":""},{"path":"/reference/DeltaMethod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"delta method (aka propagation errors based Taylor series approximation - see Seber's book Estimation Animal Abundance). uses first derivative fct respect par. also uses variance-covariance matrix estimated parameters derived estimating parameters input argument. first argument fct par vector parameter estimates. return single value (vector) estimate(s). remaining arguments fct can passed fct including end call DeltaMethod name=value pairs.","code":""},{"path":"/reference/DeltaMethod.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"generic function can used setting beyond mrds package. However internal function mrds user need call explicitly.","code":""},{"path":"/reference/DeltaMethod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Numeric Delta Method approximation for the variance-covariance matrix — DeltaMethod","text":"Jeff Laake David L Miller","code":""},{"path":"/reference/det.tables.html","id":null,"dir":"Reference","previous_headings":"","what":"Observation detection tables — det.tables","title":"Observation detection tables — det.tables","text":"Creates series tables dual observer data shows number missed detected observer within defined distance classes.","code":""},{"path":"/reference/det.tables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Observation detection tables — det.tables","text":"","code":"det.tables(model, nc = NULL, breaks = NULL)"},{"path":"/reference/det.tables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Observation detection tables — det.tables","text":"model fitted model ddf nc number equal-width bins histogram breaks user define breakpoints","code":""},{"path":"/reference/det.tables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Observation detection tables — det.tables","text":"list object class \"det.tables\" Observer1 table observer 1 Observer2 table observer 2 Duplicates histogram counts duplicates Pooled histogram counts observations either observer Obs1_2 table observer 1 within subset seen observer 2 Obs2_1 table observer 2 within subset seen observer 1","code":""},{"path":"/reference/det.tables.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Observation detection tables — det.tables","text":"Jeff Laake","code":""},{"path":"/reference/det.tables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Observation detection tables — det.tables","text":"","code":"# \\donttest{ data(book.tee.data) region <- book.tee.data$book.tee.region egdata <- book.tee.data$book.tee.dataframe samples <- book.tee.data$book.tee.samples obs <- book.tee.data$book.tee.obs xx <- ddf(mrmodel=~glm(formula=~distance*observer), dsmodel=~mcds(key=\"hn\", formula=~sex), data=egdata, method=\"io\", meta.data=list(width=4)) tabs <- det.tables(xx, breaks=c(0, 0.5, 1, 2, 3, 4)) par(mfrow=c(2, 2)) plot(tabs, new=FALSE, which=c(1, 2, 5, 6)) # }"},{"path":"/reference/detfct.fit.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit detection function using key-adjustment functions — detfct.fit","title":"Fit detection function using key-adjustment functions — detfct.fit","text":"Fit detection function observed distances using key-adjustment function approach. adjustment functions included alternate fitting parameters key adjustment functions parameters much like approach CDS MCDS Distance FORTRAN code. calls detfct.fit.opt uses R optim function allow non-linear constraints inclusion adjustments allow detection function non-monotone.","code":""},{"path":"/reference/detfct.fit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit detection function using key-adjustment functions — detfct.fit","text":"","code":"detfct.fit(ddfobj, optim.options, bounds, misc.options)"},{"path":"/reference/detfct.fit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit detection function using key-adjustment functions — detfct.fit","text":"ddfobj detection function object optim.options control options optim bounds bounds parameters misc.options miscellaneous options","code":""},{"path":"/reference/detfct.fit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit detection function using key-adjustment functions — detfct.fit","text":"fitted detection function model object following list structure par final parameter vector value final negative log likelihood value counts number function evaluations convergence see codes optim message string convergence hessian hessian evaluated final parameter values aux list 20 elements maxit: maximum number iterations allowed optimization lower: lower bound values parameters upper: upper bound values parameters setlower: TRUE user set bounds setupper: TRUE user set bounds point: TRUE point counts FALSE line transect int.range: integration range values showit: integer value determines information printed iteration silent: option silence errors detfct.fit.opt integral.numeric TRUE compute logistic integrals numerically breaks: breaks distance defined fixed bins analysis maxiter: maximum iterations used refit: TRUE, detection function fitted parameters boundary convergence achieved nrefits: number refittings mono: TRUE monotonicity enforced mono.strict: TRUE, strict monotonicity enforced; otherwise weak width: radius point count half-width strip standardize: TRUE, detection function scaled g(0)=1 ddfobj: distance detection function object; see create.ddfobj bounded: TRUE parameters ended boundary (think) model: list formulas detection function model (probably can remove )","code":""},{"path":"/reference/detfct.fit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit detection function using key-adjustment functions — detfct.fit","text":"Dave Miller; Jeff Laake","code":""},{"path":"/reference/detfct.fit.opt.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit detection function using key-adjustment functions — detfct.fit.opt","title":"Fit detection function using key-adjustment functions — detfct.fit.opt","text":"Fit detection function observed distances using key-adjustment function approach. adjustment functions included alternate fitting parameters key adjustment functions parameters much like approach CDS MCDS Distance FORTRAN code. function called driver function detfct.fit, calls relevant optimisation routine, slsqp, solnp optimx.","code":""},{"path":"/reference/detfct.fit.opt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit detection function using key-adjustment functions — detfct.fit.opt","text":"","code":"detfct.fit.opt(ddfobj, optim.options, bounds, misc.options, fitting = \"all\")"},{"path":"/reference/detfct.fit.opt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit detection function using key-adjustment functions — detfct.fit.opt","text":"ddfobj detection function object optim.options control options optim bounds bounds parameters misc.options miscellaneous options fitting character string values \"\",\"key\",\"adjust\" determine parameters allowed vary fitting","code":""},{"path":"/reference/detfct.fit.opt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit detection function using key-adjustment functions — detfct.fit.opt","text":"fitted detection function model object following list structure par final parameter vector value final negative log likelihood value counts number function evaluations convergence see codes optim message string convergence hessian hessian evaluated final parameter values aux list 20 elements maxit: maximum number iterations allowed optimization lower: lower bound values parameters upper: upper bound values parameters setlower: TRUE user set bounds setupper: TRUE user set bounds point: TRUE point counts FALSE line transect int.range: integration range values showit: integer value determines information printed iteration integral.numeric TRUE compute logistic integrals numerically breaks: breaks distance defined fixed bins analysis maxiter: maximum iterations used refit: TRUE, detection function fitted parameters boundary convergence achieved nrefits: number refittings mono: TRUE, monotonicity enforced mono.strict: TRUE, strict monotonicity enforced; otherwise weak width: radius point count half-width strip standardize: TRUE, detection function scaled g(0)=1 ddfobj: distance detection function object; see create.ddfobj bounded: TRUE estimated parameters bounds model: list formulas detection function model (probably can remove )","code":""},{"path":"/reference/detfct.fit.opt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit detection function using key-adjustment functions — detfct.fit.opt","text":"Dave Miller; Jeff Laake; Lorenzo Milazzo; Felix Petersma","code":""},{"path":"/reference/dht.deriv.html","id":null,"dir":"Reference","previous_headings":"","what":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"Computes abundance specified values parameters numerical computation first derivative respect parameters detection function. internal function called DeltaMethod invoked dht.se","code":""},{"path":"/reference/dht.deriv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"","code":"dht.deriv(par, model, obs, samples, options = list())"},{"path":"/reference/dht.deriv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"par detection function parameter values model ddf model object obs observations table samples samples table options list options specified dht","code":""},{"path":"/reference/dht.deriv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"vector abundance estimates values parameters specified par","code":""},{"path":"/reference/dht.deriv.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"Internal function; intended called user","code":""},{"path":[]},{"path":"/reference/dht.deriv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator — dht.deriv","text":"Jeff Laake","code":""},{"path":"/reference/dht.html","id":null,"dir":"Reference","previous_headings":"","what":"Density and abundance estimates and variances — dht","title":"Density and abundance estimates and variances — dht","text":"Compute density abundance estimates variances based Horvitz-Thompson-like estimator.","code":""},{"path":"/reference/dht.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Density and abundance estimates and variances — dht","text":"","code":"dht( model, region.table, sample.table, obs.table = NULL, subset = NULL, se = TRUE, options = list() )"},{"path":"/reference/dht.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Density and abundance estimates and variances — dht","text":"model ddf model object region.table data.frame region records. Two columns: Region.Label Area. density required, one can set Area=0 regions. sample.table data.frame sample records. Three columns: Region.Label, Sample.Label, Effort. obs.table data.frame observation records fields: object, Region.Label, Sample.Label give links sample.table, region.table data records used model. necessary data.frame used create model contains Region.Label, Sample.Label columns. subset subset statement create obs.table se TRUE computes standard errors, coefficient variation confidence intervals (based log-normal approximation). See \"Uncertainty\" . options list options can set, see \"dht options\", .","code":""},{"path":"/reference/dht.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Density and abundance estimates and variances — dht","text":"list object class dht elements: clusters result list object clusters individuals result list individuals Expected.S data.frame estimates expected cluster size fields Region, Expected.S se.Expected.S cluster size=1, result includes individuals clusters Expected.S. list structure clusters individuals : bysample data.frame giving results sample; Nchat estimated abundance within sample Nhat scaled surveyed area/covered area within region summary data.frame summary statistics region total N data.frame estimates abundance region total D data.frame estimates density region total average.p average detection probability estimate cormat correlation matrix regional abundance/density estimates total (one region) vc list 3: total variance-covariance matrix, detection function component variance encounter rate component variance. detection v-c matrix partial vector returned Nhat..sample another summary Nhat sample used dht.se","code":""},{"path":"/reference/dht.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Density and abundance estimates and variances — dht","text":"Density abundance within sampled region computed based Horvitz-Thompson-like estimator groups individuals (clustered population) extrapolated entire survey region based defined regional stratification. variance based replicate samples within regional stratification. clustered populations, \\(E(s)\\) standard error also output. Abundance estimated Horvitz-Thompson-like estimator (Huggins 1989, 1991; Borchers et al 1998; Borchers Burnham 2004). abundance sampled region simply \\(1/p_1 + 1/p_2 + ... + 1/p_n\\) \\(p_i\\) estimated detection probability \\(\\)th detection \\(n\\) total observations. strictly Horvitz-Thompson estimator \\(p_i\\) estimated known. animals observed tight clusters, estimator gives abundance groups (group=TRUE options) abundance individuals estimated \\(s_1/p_1 + s_2/p_2 + ... + s_n/p_n\\), \\(s_i\\) size (e.g., number animals group) observation (group=FALSE options). Extrapolation estimation abundance entire survey region based either random sampling design stratified random sampling design. Replicate samples (lines) specified within regional strata region.table, . stratification, region.table contain single record Area entire survey region. sample.table linked region.table Region.Label. obs.table linked sample.table Sample.Label Region.Label. Abundance can restricted subset (e.g., particular species) population limiting list observations obs.table desired subset. Alternatively, Sample.Label Region.Label data.frame used fit model, subset argument can given place obs.table. use subset argument include observations, use subset=1==1 avoid creating obs.table. extrapolating entire survey region important unit measurements consistent converted consistency. conversion factor can specified convert.units variable options list. values Area region.table, must made consistent units Effort sample.table units distance data.frame analyzed. easiest units Area square units Effort necessary convert units distance units Effort. example, Effort entered kilometres Area square kilometres distance metres using options=list(convert.units=0.001) convert metres kilometres, density expressed square kilometres consistent units Area. However, can different units long appropriate composite value convert.units chosen. Abundance survey region can expressed : *N/Area survey region, N abundance covered (sampled) region, area sampled region units Effort * distance. sampled region multiplied convert.units, chosen result units Area. example, Effort entered kilometres, Area hectares (100m x 100m) distance metres, using options=list(convert.units=10) convert units hectares (100 convert metres 100 metres distance .1 convert km 100m units). argument options list variable=value pairs set options analysis. two described . pdelta need changed included completeness. controls precision first derivative calculation delta method variance. option areas.supplied TRUE covered area assumed supplied CoveredArea column sample data.frame.","code":""},{"path":"/reference/dht.html","id":"uncertainty","dir":"Reference","previous_headings":"","what":"Uncertainty","title":"Density and abundance estimates and variances — dht","text":"argument se=TRUE, standard errors density abundance computed. Coefficient variation log-normal confidence intervals constructed using Satterthwaite approximation degrees freedom (Buckland et al. 2001 p. 90). function dht.se computes variance interval estimates. variance two components: variation due uncertainty estimation detection function parameters; variation abundance due random sample selection; first component (model parameter uncertainty) computed using delta method estimate variance (Huggins 1989, 1991, Borchers et al. 1998) first derivatives abundance estimator respect parameters detection function computed numerically (see DeltaMethod). second component (encounter rate variance) can computed one several ways depending form taken encounter rate estimator used. begin three possible values varflag calculate encounter rate: 0 uses binomial variance number observations (equation 13 Borchers et al. 1998). estimator useful sampled region survey region objects clustered; situation occur often; 1 uses encounter rate \\(n/L\\) (objects observed per unit transect) Buckland et al. (2001) pg 78-79 (equation 3.78) line transects (see also Fewster et al, 2009 estimator R2). variance estimator appropriate size derivative size used detection function; 2 default uses encounter rate estimator \\(\\hat{N}/L\\) (estimated abundance per unit transect) suggested Innes et al (2002) Marques & Buckland (2004). general covariates used models, default varflag=2 preferable estimated abundance take account variability due covariate effects. population clustered mean group size standard error also reported. options 1 2, possible choose one estimator forms given Fewster et al (2009) line transects: \"R2\", \"R3\", \"R4\", \"S1\", \"S2\", \"O1\", \"O2\" \"O3\" specifying ervar= option (default \"R2\"). points, either \"P2\" \"P3\" estimator can selected (>=mrds 2.3.0 default \"P2\", <= mrds 2.2.9 default \"P3\"). See varn Fewster et al (2009) details estimators.","code":""},{"path":"/reference/dht.html","id":"dht-options","dir":"Reference","previous_headings":"","what":"dht options","title":"Density and abundance estimates and variances — dht","text":"Several options available control calculations output: ci.width Confidence interval width, expressed decimal 0 1 (default 0.95, giving 95% CI) pdelta delta value computing numerical first derivatives (Default: 0.001) varflag 0,1,2 (see \"Uncertainty\") (Default: 2) convert.units multiplier width convert units length (Default: 1) ervar encounter rate variance type (see \"Uncertainty\" type argument varn). (Default: \"R2\" lines \"P2\" points)","code":""},{"path":"/reference/dht.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Density and abundance estimates and variances — dht","text":"Borchers, D.L., S.T. Buckland, P.W. Goedhart, E.D. Clarke, S.L. Hedley. 1998. Horvitz-Thompson estimators double-platform line transect surveys. Biometrics 54: 1221-1237. Borchers, D.L. K.P. Burnham. General formulation distance sampling pp 10-11 : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press. Buckland, S.T., D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. 2001. Introduction Distance Sampling: Estimating Abundance Biological Populations. Oxford University Press. Fewster, R.M., S.T. Buckland, K.P. Burnham, D.L. Borchers, P.E. Jupp, J.L. Laake L. Thomas. 2009. Estimating encounter rate variance distance sampling. Biometrics 65: 225-236. Huggins, R.M. 1989. statistical analysis capture experiments. Biometrika 76:133-140. Huggins, R.M. 1991. practical aspects conditional likelihood approach capture experiments. Biometrics 47: 725-732. Innes, S., M.P. Heide-Jorgensen, J.L. Laake, K.L. Laidre, H.J. Cleator, P. Richard, R.E.. Stewart. 2002. Surveys belugas narwhals Canadian High Arctic 1996. NAMMCO Scientific Publications 4: 169-190. Marques, F.F.C. S.T. Buckland. 2004. Covariate models detection function. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/dht.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Density and abundance estimates and variances — dht","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/dht.se.html","id":null,"dir":"Reference","previous_headings":"","what":"Variance and confidence intervals for density and abundance estimates — dht.se","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"Computes standard error, cv, log-normal confidence intervals abundance density within region () total regions. also produces correlation matrix regional total estimates.","code":""},{"path":"/reference/dht.se.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"","code":"dht.se( model, region.table, samples, obs, options, numRegions, estimate.table, Nhat.by.sample )"},{"path":"/reference/dht.se.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"model ddf model object region.table table region values samples table samples(replicates) obs table observations options list options can set (see dht) numRegions number regions estimate.table table estimate values Nhat..sample estimated abundances sample","code":""},{"path":"/reference/dht.se.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"List 2 elements: estimate.table completed table se, cv confidence limits vc correlation matrix estimates","code":""},{"path":"/reference/dht.se.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"variance two components: variation due uncertainty estimation detection function parameters; variation abundance due random sample selection; first component (model parameter uncertainty) computed using delta method estimate variance (Huggins 1989, 1991, Borchers et al. 1998) first derivatives abundance estimator respect parameters detection function computed numerically (see DeltaMethod). second component (encounter rate variance) can computed one several ways depending form taken encounter rate estimator used. begin three possible values varflag calculate encounter rate: 0 uses binomial variance number observations (equation 13 Borchers et al. 1998). estimator useful sampled region survey region objects clustered; situation occur often; 1 uses encounter rate \\(n/L\\) (objects observed per unit transect) Buckland et al. (2001) pg 78-79 (equation 3.78) line transects (see also Fewster et al, 2009 estimator R2). variance estimator appropriate size derivative size used detection function; 2 default uses encounter rate estimator \\(\\hat{N}/L\\) (estimated abundance per unit transect) suggested Innes et al (2002) Marques & Buckland (2004). general covariates used models, default varflag=2 preferable estimated abundance take account variability due covariate effects. population clustered mean group size standard error also reported. options 1 2, possible choose one estimator forms given Fewster et al (2009). line transects: \"R2\", \"R3\", \"R4\", \"S1\", \"S2\", \"O1\", \"O2\" \"O3\" can used specifying ervar= option (default \"R2\"). points, either \"P2\" \"P3\" estimator can selected (>=mrds 2.3.0 default \"P2\", <= mrds 2.2.9 default \"P3\"). See varn Fewster et al (2009) details estimators. Exceptions occur one sample stratum. case uses Poisson assumption (\\(Var(x)=x\\)) assumes known variance \\(z=1.96\\) used critical value. cases degrees freedom \\(t\\)-distribution assumed log(abundance) log(density) based Satterthwaite approximation (Buckland et al. 2001 pg 90) degrees freedom (df). df weighted squared cv combining two sources variation assumed log-normal distribution components multiplicative. combining df sampling variance across regions weighted variance sum across regions. non-zero correlation regional estimates can occur using common detection function across regions. reflected correlation matrix regional total estimates given value list. needed subtotals regional estimates needed.","code":""},{"path":"/reference/dht.se.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"function called dht expected user call function directly documented completeness anyone expanding code using function code.","code":""},{"path":"/reference/dht.se.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"see dht","code":""},{"path":[]},{"path":"/reference/dht.se.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Variance and confidence intervals for density and abundance estimates — dht.se","text":"Jeff Laake","code":""},{"path":"/reference/distpdf.grad.html","id":null,"dir":"Reference","previous_headings":"","what":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"function updated match distpdf closely, flexibility. Effectively, gives gradient distpdf detfct, whichever one specified.","code":""},{"path":"/reference/distpdf.grad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"","code":"distpdf.grad( distance, par.index, ddfobj, standardize = FALSE, width, point, left = 0, pdf.based = TRUE )"},{"path":"/reference/distpdf.grad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"distance vector distances par.index index parameter interest ddfobj ddf object standardize whether function return gradient standardized detection function g(x)/g(0) (TRUE), simply g(0) (FALSE). Currently implemented standardize = FALSE. width truncation width point data point transects (TRUE) line transects (FALSE). left left truncation (default 0) pdf.based gradient non-normalised pdf (TRUE) detection function (FALSE)? Default TRUE.","code":""},{"path":"/reference/distpdf.grad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"gradient non-normalised pdf detection w.r.t. parameter parameter index par.index.","code":""},{"path":"/reference/distpdf.grad.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"Various functions used specify key adjustment functions gradients detection functions. far, developed half-normal, hazard-rate uniform key functions combination cosine, simple polynomial Hermite polynomial adjustments. called gradient-based solver called general user. distpdf.grad call either half-normal, hazard-rate uniform function adjustment terms fit data better, returning gradient detection distance w.r.t. parameters. adjustments either cosine, Hermite simple polynomial.","code":""},{"path":"/reference/distpdf.grad.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Gradient of the non-normalised pdf of distances or the detection function for the distances. — distpdf.grad","text":"Felix Petersma","code":""},{"path":"/reference/distpdf.html","id":null,"dir":"Reference","previous_headings":"","what":"Detection functions — distpdf","title":"Detection functions — distpdf","text":"Various functions used specify key adjustment functions detection functions.","code":""},{"path":"/reference/distpdf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Detection functions — distpdf","text":"","code":"detfct(distance, ddfobj, select=NULL, index=NULL, width=NULL, standardize = TRUE, stdint=FALSE, left=0) adjfct.cos(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE) adjfct.poly(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE) adjfct.herm(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE) scalevalue(key.scale, z) keyfct.hn(distance, key.scale) keyfct.hz(distance, key.scale, key.shape) keyfct.gamma(distance, key.scale, key.shape) fx(distance,ddfobj,select=NULL,index=NULL,width=NULL, standardize=TRUE,stdint=FALSE, left=0) fr(distance,ddfobj,select=NULL,index=NULL,width=NULL, standardize=TRUE,stdint=FALSE) distpdf(distance,ddfobj,select=NULL,index=NULL,width=NULL,standardize=TRUE, stdint=FALSE,point=FALSE, left=0)"},{"path":"/reference/distpdf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Detection functions — distpdf","text":"distance vector distances ddfobj distance sampling object (see create.ddfobj) select logical vector selection data values index specific data row index width (right) truncation width standardize logical used decide whether divide function evaluated 0 stdint logical used decide whether integral standardized point TRUE, point counts; otherwise line transects left (left) truncation distance z design matrix scale function key.scale vector scale values key.shape vector shape values adj.order vector adjustment orders adj.parm vector adjustment parameters scaling scaling adjustment terms adj.exp TRUE uses exp(adj) adjustment keep f(x)>0","code":""},{"path":"/reference/distpdf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Detection functions — distpdf","text":"detfct, value vector detection probabilities keyfct.*, vector key function evaluations adjfct.*, vector adjustment series evaluations scalevalue, vector scale parameters.","code":""},{"path":"/reference/distpdf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Detection functions — distpdf","text":"Multi-covariate detection functions (MCDS) represented function \\(g(x,w,\\theta)\\) x distance, z set covariates \\(\\theta\\) parameter vector. functions defined \\(g(0,w,\\theta)=1\\) covariates modify scale \\((x/\\sigma)\\) log link used relate \\(\\sigma\\) covariates, \\(\\sigma=exp(\\theta*w)\\). CDS function obtained constant \\(\\sigma\\) equivalent intercept design matrix, z. detfct call either gamma, half-normal, hazard-rate uniform function returning probability detection distance. addition simple model , may specify adjustment terms fit data better. adjustments either Cosine, Hermite simple polynomials. specified arguments detfct, detailed . detfct function calls others assembles final result using either key(x)[1+series(x)] (key(x)[1+series(x)])/(key(0)[1+series(0)]) (depending value standardize). keyfct.* functions calculate key function values adjfct.* calculate adjustment term values. scalevalue either detection function computes scale log link using parameters covariate design matrix fx, fr non-normalized probability density line transects point counts respectively","code":""},{"path":"/reference/distpdf.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Detection functions — distpdf","text":"Marques, F. F. C., & Buckland, S. T. (2003). Incorporating covariates standard line transect analyses. Biometrics, 59(4), 924-935. Buckland, S. T., Anderson, D. R., Burnham, K. P., Laake, J. L., Borchers, D. L., & Thomas, L. (2004). Advanced Distance Sampling. Oxford University Press, Oxford, UK. Becker, E. F. P. X. Quang. 2009. gamma-shaped detection function line transect surveys mark-recapture covariate data. Journal Agricultural Biological Environmental Statistics 14:207-223.","code":""},{"path":[]},{"path":"/reference/distpdf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Detection functions — distpdf","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/ds.function.html","id":null,"dir":"Reference","previous_headings":"","what":"Distance Sampling Functions — ds.function","title":"Distance Sampling Functions — ds.function","text":"Computes values conditional unconditional detection functions probability density functions line/point data single observer dual observer 3 configurations (io,trial,rem).","code":""},{"path":"/reference/ds.function.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Distance Sampling Functions — ds.function","text":"","code":"ds.function( model, newdata = NULL, obs = \"All\", conditional = FALSE, pdf = TRUE, finebr )"},{"path":"/reference/ds.function.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Distance Sampling Functions — ds.function","text":"model model object newdata dataframe compute values; NULL uses fitting data obs 1 2 observer 1 2, 3 duplicates, \".\" combined \"\" return values conditional FALSE, computes p(x) based distance detection function TRUE based mr detection function pdf FALSE, returns p(x) TRUE, returns p(x)*pi(x)/integral p(x)*pi(x) finebr fine break values line averaged","code":""},{"path":"/reference/ds.function.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Distance Sampling Functions — ds.function","text":"List containing xgrid grid distance values values average detection fct values xgrid values","code":""},{"path":"/reference/ds.function.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Distance Sampling Functions — ds.function","text":"Placeholder – functional —-","code":""},{"path":"/reference/ds.function.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Distance Sampling Functions — ds.function","text":"Jeff Laake","code":""},{"path":"/reference/flnl.constr.grad.neg.html","id":null,"dir":"Reference","previous_headings":"","what":"(Negative) gradients of constraint function — flnl.constr.grad.neg","title":"(Negative) gradients of constraint function — flnl.constr.grad.neg","text":"function derives gradients constraint function model parameters, following order: 1. Scale parameter (part key function) 2. Shape parameter (part key function) 3. Adjustment parameter 1 4. Adjustment parameter 2 5. Etc.","code":""},{"path":"/reference/flnl.constr.grad.neg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"(Negative) gradients of constraint function — flnl.constr.grad.neg","text":"","code":"flnl.constr.grad.neg(pars, ddfobj, misc.options, fitting = \"all\")"},{"path":"/reference/flnl.constr.grad.neg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"(Negative) gradients of constraint function — flnl.constr.grad.neg","text":"pars vector parameter values detection function gradients negative log-likelihood evaluated ddfobj distance sampling object misc.options list object containing additional information type optimiser truncation width, created within ddf.ds fitting character string values \"\", \"key\", \"adjust\" determine parameters allowed vary fitting. actually used. Defaults \"\".","code":""},{"path":"/reference/flnl.constr.grad.neg.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"(Negative) gradients of constraint function — flnl.constr.grad.neg","text":"matrix gradients constraints (rows) w.r.t every parameters (columns)","code":""},{"path":"/reference/flnl.constr.grad.neg.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"(Negative) gradients of constraint function — flnl.constr.grad.neg","text":"constraint function formed specified number non-linear constraints, defaults 20 specified misc.options$mono.points. constraint function checks whether standardised detection function 1) weakly/strictly monotonic points 2) non-negative points. flnl.constr.grad returns gradients constraints w.r.t. parameters detection function, .e., 2 times mono.points gradients every parameter. function mostly follows structure flnl.constr detfct.fit.mono.R.","code":""},{"path":"/reference/flnl.grad.html","id":null,"dir":"Reference","previous_headings":"","what":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","title":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","text":"function derives gradients negative log likelihood function, respect parameters. based theory presented Introduction Distance Sampling (2001) Distance Sampling: Methods Applications (2015). meant called users mrds Distance packages directly rather gradient-based solver. solver use distance sampling model single-observer data coming either line point transect detection function contains adjustment series covariates. implement following key + adjustment series combinations detections function: key function can half-normal, hazard-rate uniform, adjustment series can cosine, simple polynomial Hermite polynomial. Data can either binned exact, combination two implemented yet.","code":""},{"path":"/reference/flnl.grad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","text":"","code":"flnl.grad(pars, ddfobj, misc.options, fitting = \"all\")"},{"path":"/reference/flnl.grad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","text":"pars vector parameter values detection function gradients negative log-likelihood evaluated ddfobj distance sampling object misc.options list object containing additional information type optimiser truncation width, created ddf.ds fitting character string values \"\", \"key\", \"adjust\" determine parameters allowed vary fitting. actually used. Defaults \"\".","code":""},{"path":"/reference/flnl.grad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","text":"gradients negative log-likelihood w.r.t. parameters","code":""},{"path":"/reference/flnl.grad.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"This function derives the gradients of the negative log likelihood function, with respect to all parameters. It is based on the theory presented in Introduction to Distance Sampling (2001) and Distance Sampling: Methods and Applications (2015). It is not meant to be called by users of the mrds and Distance packages directly but rather by the gradient-based solver. This solver is use when our distance sampling model is for single-observer data coming from either line or point transect and only when the detection function contains an adjustment series but no covariates. It is implement for the following key + adjustment series combinations for the detections function: the key function can be half-normal, hazard-rate or uniform, and the adjustment series can be cosine, simple polynomial or Hermite polynomial. Data can be either binned or exact, but a combination of the two has not been implemented yet. — flnl.grad","text":"Felix Petersma","code":""},{"path":"/reference/flnl.html","id":null,"dir":"Reference","previous_headings":"","what":"Log-likelihood computation for distance sampling data — flnl","title":"Log-likelihood computation for distance sampling data — flnl","text":"specific set parameter values, computes returns negative log-likelihood distance sampling likelihood distances unbinned, binned mixture . function flnl function minimized using optim within ddf.ds.","code":""},{"path":"/reference/flnl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Log-likelihood computation for distance sampling data — flnl","text":"","code":"flnl(fpar, ddfobj, misc.options, fitting = \"all\")"},{"path":"/reference/flnl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Log-likelihood computation for distance sampling data — flnl","text":"fpar parameter values detection function negative log-likelihood evaluated ddfobj distance sampling object misc.options list following elements: width transect width; int.range integration range observations; showit 0 3 controls level debug output; integral.numeric TRUE integral computed numerically rather analytically; point point transect? fitting character \"key\" fitting key function parameters, \"adjust\" fitting adjustment parameters \"\" fit ","code":""},{"path":"/reference/flnl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Log-likelihood computation for distance sampling data — flnl","text":"negative log-likelihood value parameter values specified fpar","code":""},{"path":"/reference/flnl.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Log-likelihood computation for distance sampling data — flnl","text":"computation flpt.lnl negative log-likelihood computed observation. flnl wrapper optionally outputs intermediate results sums individual log-likelihood values. flnl main routine manipulates parameters using getpar handle fitting key, adjustment parameters. calls flpt.lnl actual computation likelihood. probability density function point counts fr line transects fx. fx=g(x)/mu (g(x) detection function); whereas, f(r)=r*g(r)/mu mu cases normalizing constant. functions source code file link{detfct} called distpdf integral calculations made integratepdf.","code":""},{"path":"/reference/flnl.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Log-likelihood computation for distance sampling data — flnl","text":"internal functions used ddf.ds fit distance sampling detection functions. intended user invoke functions documented completeness.","code":""},{"path":[]},{"path":"/reference/flnl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Log-likelihood computation for distance sampling data — flnl","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/flt.var.html","id":null,"dir":"Reference","previous_headings":"","what":"Hessian computation for fitted distance detection function model parameters — flt.var","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"Computes hessian used variance-covariance matrix. hessian outer product vector first partials (see pg 62 Buckland et al 2002).","code":""},{"path":"/reference/flt.var.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"","code":"flt.var(ddfobj, misc.options)"},{"path":"/reference/flt.var.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"ddfobj distance sampling object misc.options width-transect width (W); int.range-integration range observations; showit-0 3 controls level iteration printing; integral.numeric-TRUE integral computed numerically rather analytically","code":""},{"path":"/reference/flt.var.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"variance-covariance matrix parameters detection function","code":""},{"path":"/reference/flt.var.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"internal function used ddf.ds fit distance sampling detection functions. intended user invoke function documented completeness.","code":""},{"path":"/reference/flt.var.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"Buckland et al. 2002","code":""},{"path":[]},{"path":"/reference/flt.var.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Hessian computation for fitted distance detection function model parameters — flt.var","text":"Jeff Laake David L Miller","code":""},{"path":"/reference/g0.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute value of p(0) using a logit formulation — g0","title":"Compute value of p(0) using a logit formulation — g0","text":"Compute value p(0) using logit formulation","code":""},{"path":"/reference/g0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute value of p(0) using a logit formulation — g0","text":"","code":"g0(beta, z)"},{"path":"/reference/g0.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute value of p(0) using a logit formulation — g0","text":"beta logistic parameters z design matrix covariate values","code":""},{"path":"/reference/g0.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute value of p(0) using a logit formulation — g0","text":"vector p(0) values","code":""},{"path":"/reference/g0.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute value of p(0) using a logit formulation — g0","text":"Jeff Laake","code":""},{"path":"/reference/getpar.html","id":null,"dir":"Reference","previous_headings":"","what":"Extraction and assignment of parameters to vector — getpar","title":"Extraction and assignment of parameters to vector — getpar","text":"Extracts parameters particular type (scale, shape, adjustments g0 (p(0))) vector parameters ddfobj. parameters kept single vector optimization even though different uses. assign.par parses vector based known structure assigns ddfobj. getpar extracts requested types extracted ddfobj.","code":""},{"path":"/reference/getpar.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extraction and assignment of parameters to vector — getpar","text":"","code":"getpar(ddfobj, fitting = \"all\", index = FALSE)"},{"path":"/reference/getpar.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extraction and assignment of parameters to vector — getpar","text":"ddfobj distance sampling object (see create.ddfobj) fitting character string either \"\",\"key\",\"adjust\" determines parameters retrieved index logical determines whether parameters returned (FALSE) starting indices parameter vector scale, shape, adjustment parameters","code":""},{"path":"/reference/getpar.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extraction and assignment of parameters to vector — getpar","text":"index==FALSE, vector parameters requested index==TRUE, vector 3 indices shape, scale, adjustment","code":""},{"path":"/reference/getpar.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extraction and assignment of parameters to vector — getpar","text":"Internal functions intended called user.","code":""},{"path":[]},{"path":"/reference/getpar.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extraction and assignment of parameters to vector — getpar","text":"Jeff Laake","code":""},{"path":"/reference/gof.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute chi-square goodness-of-fit test for ds models — gof.ds","title":"Compute chi-square goodness-of-fit test for ds models — gof.ds","text":"Compute chi-square goodness--fit test ds models","code":""},{"path":"/reference/gof.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute chi-square goodness-of-fit test for ds models — gof.ds","text":"","code":"gof.ds(model, breaks = NULL, nc = NULL)"},{"path":"/reference/gof.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute chi-square goodness-of-fit test for ds models — gof.ds","text":"model ddf model object breaks distance cut points nc number distance classes","code":""},{"path":"/reference/gof.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute chi-square goodness-of-fit test for ds models — gof.ds","text":"list chi-square value, df p-value","code":""},{"path":[]},{"path":"/reference/gof.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute chi-square goodness-of-fit test for ds models — gof.ds","text":"Jeff Laake","code":""},{"path":"/reference/gstdint.html","id":null,"dir":"Reference","previous_headings":"","what":"Integral of pdf of distances — gstdint","title":"Integral of pdf of distances — gstdint","text":"Computes integral distpdf scale=1 (stdint=TRUE) specified scale (stdint=FALSE).","code":""},{"path":"/reference/gstdint.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Integral of pdf of distances — gstdint","text":"","code":"gstdint( x, ddfobj, index = NULL, select = NULL, width, standardize = TRUE, point = FALSE, stdint = TRUE, doeachint = FALSE, left = left )"},{"path":"/reference/gstdint.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Integral of pdf of distances — gstdint","text":"x lower, upper value integration ddfobj distance detection function specification index specific data row index select logical vector selection data values width truncation width standardize TRUE, divide function evaluated 0 point logical determine point (TRUE) line transect(FALSE) stdint TRUE, scale=1 otherwise specified scale used doeachint TRUE perform integration using integrate left left truncation width","code":""},{"path":"/reference/gstdint.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Integral of pdf of distances — gstdint","text":"vector integral values detection function","code":""},{"path":"/reference/gstdint.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Integral of pdf of distances — gstdint","text":"internal function intended invoked directly.","code":""},{"path":"/reference/gstdint.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Integral of pdf of distances — gstdint","text":"Jeff Laake David L Miller","code":""},{"path":"/reference/histline.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot histogram line — histline","title":"Plot histogram line — histline","text":"Takes bar heights (height) cutpoints (breaks), constructs line-histogram using function plot() (lineonly==FALSE) lines() (lineonly==TRUE).","code":""},{"path":"/reference/histline.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot histogram line — histline","text":"","code":"histline( height, breaks, lineonly = FALSE, outline = FALSE, ylim = range(height), xlab = \"x\", ylab = \"y\", det.plot = FALSE, add = FALSE, ... )"},{"path":"/reference/histline.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot histogram line — histline","text":"height heights histogram bars breaks cutpoints x lineonly TRUE, drawn plot; otherwise lines allow addition current plot outline TRUE, outline histogram plotted ylim limits y axis xlab label x axis ylab label y axis det.plot TRUE, plot detection yaxis limited unit interval add plot add previous window ... Additional unspecified arguments plot","code":""},{"path":"/reference/histline.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot histogram line — histline","text":"None","code":""},{"path":"/reference/histline.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot histogram line — histline","text":"Jeff Laake David L Miller","code":""},{"path":"/reference/integratedetfct.logistic.html","id":null,"dir":"Reference","previous_headings":"","what":"Integrate a logistic detection function — integratedetfct.logistic","title":"Integrate a logistic detection function — integratedetfct.logistic","text":"Integrates logistic detection function; separate function used certain cases integral can solved analytically also scale trick used half-normal hazard rate work logistic.","code":""},{"path":"/reference/integratedetfct.logistic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Integrate a logistic detection function — integratedetfct.logistic","text":"","code":"integratedetfct.logistic(x, scalemodel, width, theta1, integral.numeric, w)"},{"path":"/reference/integratedetfct.logistic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Integrate a logistic detection function — integratedetfct.logistic","text":"x logistic design matrix values scalemodel scale model logistic width transect width theta1 parameters logistic integral.numeric TRUE computes numerical integral value w design covariates","code":""},{"path":"/reference/integratedetfct.logistic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Integrate a logistic detection function — integratedetfct.logistic","text":"vector integral values","code":""},{"path":"/reference/integratedetfct.logistic.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Integrate a logistic detection function — integratedetfct.logistic","text":"Jeff Laake","code":""},{"path":"/reference/integratelogistic.analytic.html","id":null,"dir":"Reference","previous_headings":"","what":"Analytically integrate logistic detection function — integratelogistic.analytic","title":"Analytically integrate logistic detection function — integratelogistic.analytic","text":"Computes integral (analytically) x 0 width logistic detection function; reference see integral #526 CRC Std Math Table 24th ed","code":""},{"path":"/reference/integratelogistic.analytic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Analytically integrate logistic detection function — integratelogistic.analytic","text":"","code":"integratelogistic.analytic(x, models, beta, width)"},{"path":"/reference/integratelogistic.analytic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Analytically integrate logistic detection function — integratelogistic.analytic","text":"x matrix data models list model formulae beta parameters logistic detection function width transect half-width","code":""},{"path":"/reference/integratelogistic.analytic.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Analytically integrate logistic detection function — integratelogistic.analytic","text":"Jeff Laake","code":""},{"path":"/reference/integratepdf.grad.html","id":null,"dir":"Reference","previous_headings":"","what":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","title":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","text":"Gradient integral detection function, .e., d beta/d theta documentation. gradient integral integral gradient, thanks Leibniz integral rule.","code":""},{"path":"/reference/integratepdf.grad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","text":"","code":"integratepdf.grad( par.index, ddfobj, int.range, width, standardize = FALSE, point = FALSE, left = 0, pdf.based = TRUE )"},{"path":"/reference/integratepdf.grad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","text":"par.index index parameter interest ddfobj ddf object int.range vector lower upper bound integration width truncation width standardize TRUE non-standardised detection function integrated. implemented standardize = FALSE, users touch argument can probably removed. point data point transects (TRUE) line transects (FALSE). left left truncation. Defaults zero. pdf.based evaluate non-normalised pdf detection function? Default TRUE.","code":""},{"path":"/reference/integratepdf.grad.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","text":"internal use – called mrds Distance users directly.","code":""},{"path":"/reference/integratepdf.grad.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges. — integratepdf.grad","text":"Felix Petersma","code":""},{"path":"/reference/integratepdf.html","id":null,"dir":"Reference","previous_headings":"","what":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","title":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","text":"Computes integral pdf observed distances x observation. method computation depends argument switches set type detection function.","code":""},{"path":"/reference/integratepdf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","text":"","code":"integratepdf( ddfobj, select, width, int.range, standardize = TRUE, point = FALSE, left = 0, doeachint = FALSE )"},{"path":"/reference/integratepdf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","text":"ddfobj distance detection function specification select logical vector selection data values width truncation width int.range integration range matrix; vector converted matrix standardize logical used decide whether divide function evaluated 0 point logical determine point count (TRUE) line transect (FALSE) left left truncation width doeachint calculate integral numerically","code":""},{"path":"/reference/integratepdf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","text":"vector integral values - one observation","code":""},{"path":"/reference/integratepdf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Numerically integrate pdf of observed distances over specified ranges — integratepdf","text":"Jeff Laake & Dave Miller","code":""},{"path":"/reference/io.glm.html","id":null,"dir":"Reference","previous_headings":"","what":"Iterative offset GLM/GAM for fitting detection function — io.glm","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"Provides iterative algorithm finding MLEs detection (capture) probabilities two-occasion (double observer) mark-recapture experiment using standard algorithms GLM/GAM offset compensate conditioning set observations. likelihood can formulated solved numerically, use GLM/GAM provides available tools fitting, predictions, plotting etc without development.","code":""},{"path":"/reference/io.glm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"","code":"io.glm( datavec, fitformula, eps = 1e-05, iterlimit = 500, GAM = FALSE, gamplot = TRUE )"},{"path":"/reference/io.glm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"datavec dataframe fitformula logit link formula eps convergence criterion iterlimit maximum number iterations allowed GAM uses GAM instead GLM fitting gamplot set TRUE get gam plot object GAM=TRUE","code":""},{"path":"/reference/io.glm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"list class(\"ioglm\",\"glm\",\"lm\") class(\"ioglm\",\"gam\") glmobj GLM GAM object offsetvalue offsetvalues iterative fit plotobj gam plot object (GAM & gamplot==TRUE, else NULL)","code":""},{"path":"/reference/io.glm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"Note currently code function GAMs commented remainder mrds package work GAMs. internal function used ddf.io.fi fit mark-recapture models 2 occasions. argument mrmodel used fitformula.","code":""},{"path":"/reference/io.glm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"Buckland, S.T., J.M. breiwick, K.L. Cattanach, J.L. Laake. 1993. Estimated population size California gray whale. Marine Mammal Science, 9:235-249. Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.. Marques, J.R.B. Bishop, L. Thomas. 2004. topics distance sampling. pp: 360-363. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":"/reference/io.glm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Iterative offset GLM/GAM for fitting detection function — io.glm","text":"Jeff Laake, David Borchers, Charles Paxton","code":""},{"path":"/reference/is.linear.logistic.html","id":null,"dir":"Reference","previous_headings":"","what":"Collection of functions for logistic detection functions — is.linear.logistic","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"functions used test whether logistic detection function linear function distance (.linear.logistic) constant (varies distance covariates) .logistic.constant). Based tests, appropriate manner integrating detection function respect distance chosen. integrals needed estimate average detection probability given set covariates.","code":""},{"path":"/reference/is.linear.logistic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"","code":"is.linear.logistic(xmat, g0model, zdim, width)"},{"path":"/reference/is.linear.logistic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"xmat data matrix g0model logit model zdim number columns design matrix width transect width","code":""},{"path":"/reference/is.linear.logistic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"Logical TRUE condition holds FALSE otherwise","code":""},{"path":"/reference/is.linear.logistic.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"logit linear distance integral can computed analytically. logit constant varies distance one integral needs computed rather integral observation.","code":""},{"path":"/reference/is.linear.logistic.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Collection of functions for logistic detection functions — is.linear.logistic","text":"Jeff Laake","code":""},{"path":"/reference/is.logistic.constant.html","id":null,"dir":"Reference","previous_headings":"","what":"Is a logit model constant for all observations? — is.logistic.constant","title":"Is a logit model constant for all observations? — is.logistic.constant","text":"Determines whether specified logit model constant observations. constant one integral needs computed.","code":""},{"path":"/reference/is.logistic.constant.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Is a logit model constant for all observations? — is.logistic.constant","text":"","code":"is.logistic.constant(xmat, g0model, width)"},{"path":"/reference/is.logistic.constant.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Is a logit model constant for all observations? — is.logistic.constant","text":"xmat data g0model logit model width transect width","code":""},{"path":"/reference/is.logistic.constant.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Is a logit model constant for all observations? — is.logistic.constant","text":"logical value","code":""},{"path":"/reference/is.logistic.constant.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Is a logit model constant for all observations? — is.logistic.constant","text":"Jeff Laake","code":""},{"path":"/reference/keyfct.grad.hn.html","id":null,"dir":"Reference","previous_headings":"","what":"The gradient of the half-normal key function — keyfct.grad.hn","title":"The gradient of the half-normal key function — keyfct.grad.hn","text":"key function contains one parameter, scale. Current implementation assumes scaled dist x/scale, x/width","code":""},{"path":"/reference/keyfct.grad.hn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The gradient of the half-normal key function — keyfct.grad.hn","text":"","code":"keyfct.grad.hn(distance, key.scale)"},{"path":"/reference/keyfct.grad.hn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The gradient of the half-normal key function — keyfct.grad.hn","text":"distance perpendicular distance vector key.scale vector scale values","code":""},{"path":"/reference/keyfct.grad.hn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The gradient of the half-normal key function — keyfct.grad.hn","text":"vector derivatives half-normal key function w.r.t. scale parameter","code":""},{"path":"/reference/keyfct.grad.hn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The gradient of the half-normal key function — keyfct.grad.hn","text":"d key / d scale = exp(-y ^ 2 / (2 scale ^ 2)) * (y ^ 2 / scale ^ 3)","code":""},{"path":"/reference/keyfct.grad.hz.html","id":null,"dir":"Reference","previous_headings":"","what":"The gradient of the hazard-rate key function — keyfct.grad.hz","title":"The gradient of the hazard-rate key function — keyfct.grad.hz","text":"key function contains two parameters, scale shape, gradient two-dimensional. Current implementation assumes scaled dist x/scale, x/width","code":""},{"path":"/reference/keyfct.grad.hz.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The gradient of the hazard-rate key function — keyfct.grad.hz","text":"","code":"keyfct.grad.hz(distance, key.scale, key.shape, shape = FALSE)"},{"path":"/reference/keyfct.grad.hz.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The gradient of the hazard-rate key function — keyfct.grad.hz","text":"distance perpendicular distance vector key.scale vector scale values key.shape vector shape values shape gradient parameter shape parameter? Defaults FALSE","code":""},{"path":"/reference/keyfct.grad.hz.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The gradient of the hazard-rate key function — keyfct.grad.hz","text":"matrix derivatives hazard rate key function w.r.t. scale parameter shape parameter.","code":""},{"path":"/reference/keyfct.grad.hz.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The gradient of the hazard-rate key function — keyfct.grad.hz","text":"d key / d scale = (shape * exp(-(1/ (x/scale) ^ shape)) / ((x/scale) ^ shape ) * scale) d key / d shape = - ((log(x / scale) * exp(-(1/ (x/scale) ^ shape))) / (x/scale) ^ shape) distance = 0, gradients also zero. However, equation result NaN (-)Inf due operations log(0) division zero. correct line 33.","code":""},{"path":"/reference/keyfct.th1.html","id":null,"dir":"Reference","previous_headings":"","what":"Threshold key function — keyfct.th1","title":"Threshold key function — keyfct.th1","text":"Threshold key function","code":""},{"path":"/reference/keyfct.th1.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Threshold key function — keyfct.th1","text":"","code":"keyfct.th1(distance, key.scale, key.shape)"},{"path":"/reference/keyfct.th1.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Threshold key function — keyfct.th1","text":"distance perpendicular distance vector key.scale vector scale values key.shape vector shape values","code":""},{"path":"/reference/keyfct.th1.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Threshold key function — keyfct.th1","text":"vector probabilities","code":""},{"path":"/reference/keyfct.th2.html","id":null,"dir":"Reference","previous_headings":"","what":"Threshold key function — keyfct.th2","title":"Threshold key function — keyfct.th2","text":"Threshold key function","code":""},{"path":"/reference/keyfct.th2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Threshold key function — keyfct.th2","text":"","code":"keyfct.th2(distance, key.scale, key.shape)"},{"path":"/reference/keyfct.th2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Threshold key function — keyfct.th2","text":"distance perpendicular distance vector key.scale vector scale values key.shape vector shape values","code":""},{"path":"/reference/keyfct.th2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Threshold key function — keyfct.th2","text":"vector probabilities","code":""},{"path":"/reference/keyfct.tpn.html","id":null,"dir":"Reference","previous_headings":"","what":"Two-part normal key function — keyfct.tpn","title":"Two-part normal key function — keyfct.tpn","text":"two-part normal detection function Becker Christ (2015). Either side estimated apex distance histogram half-normal distribution, differing scale parameters. Covariates may included affect sides function.","code":""},{"path":"/reference/keyfct.tpn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Two-part normal key function — keyfct.tpn","text":"","code":"keyfct.tpn(distance, ddfobj)"},{"path":"/reference/keyfct.tpn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Two-part normal key function — keyfct.tpn","text":"distance perpendicular distance vector ddfobj meta object containing parameters, design matrices etc","code":""},{"path":"/reference/keyfct.tpn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Two-part normal key function — keyfct.tpn","text":"vector probabilities observation detected given specified distance assuming g(mu)=1","code":""},{"path":"/reference/keyfct.tpn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Two-part normal key function — keyfct.tpn","text":"Two-part normal models 2 important parameters: apex, estimates peak detection function ( g(x)=1). log apex reported summary results, taking exponential value give peak plotted function (see examples). parameter controls difference sides .dummy_apex_side, automatically added formula two-part normal model. One can add interactions variable normal, need add main effect automatically added.","code":""},{"path":"/reference/keyfct.tpn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Two-part normal key function — keyfct.tpn","text":"Becker, E. F., & Christ, . M. (2015). Unimodal Model Double Observer Distance Sampling Surveys. PLOS ONE, 10(8), e0136403. doi:10.1371/journal.pone.0136403","code":""},{"path":"/reference/keyfct.tpn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Two-part normal key function — keyfct.tpn","text":"Earl F Becker, David L Miller","code":""},{"path":"/reference/lfbcvi.html","id":null,"dir":"Reference","previous_headings":"","what":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","title":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","text":"data represent avian point count surveys conducted 453 point sample survey locations 24,000 (approx) live-fire region Fort Hood central Texas. Surveys conducted independent double observers (2 per survey occasion) maximum 3 paired survey histories, giving maximum 6 sample occasions (see MacKenzie et al. 2006, MacKenzie Royle 2005, Laake et al. 2011 various sample survey design details). point, surveyed 5 minutes (technically broken 3 time intervals 2, 2, 1 minutes; used ) noted detections observer collected distance observation within set distance bins (0-25, 25-50, 50-75, 75-100m) target species (Black-capped vireo's case) surveyor. primary focus use mark-recapture distance sampling methods estimate density Black-capped vireo's, estimate detection rates mark-recapture, distance, composite model.","code":""},{"path":"/reference/lfbcvi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","text":"format data frame following covariate metrics. VisitNumber Visit number point Species Species designation, either Golden-cheeked warbler (GW) Black-capped Vireo (BV) Distance Distance measure, either NA (representing detection), median binned detection distances PairNumber ID value indicating observers paired sampling occasion Observer Observer ID, either primary(1), secondary (2) Detected Detection bird, either 1 = detected, 0 = detected Date Date survey since 15 march 2011 Pred Predicted occupancy value survey hexagon based Farrell et al. (2013) Category Region.Label categorization, see mrds help file details data structure Effort Amount survey effort point Day Number days since 15 March 2011 ObjectID Unique ID paired observations","code":""},{"path":"/reference/lfbcvi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","text":"addition detailing analysis used Collier et al. (2013, Review), example documents use mrds avian point count surveys shows density models can incorporated occupancy models develop spatially explicit density surface maps. interested, distance sampling portion analysis, used conventional distance sampling (cds) multiple covariate distance sampling (mcds) uniform half-normal key functions. mark-recapture portion analysis, tended use covariates distance (median bin width), observer, date survey (days since 15 March 2011). combined mrds density estimates via Horvitz-Thompson styled estimator resource selection function gradient developed Farrell et al. (2013) estimated density ~3.14ha hexagonal grid across study area, provided density gradient Fort Hood military installation. considerable data manipulation needed analysis structure data appropriately use mrds, rather wrap analysis single function, provided Golden-cheeked warbler Black-capped vireo analyses full detail. primary differences see changes model structures model outputs two species.","code":""},{"path":"/reference/lfbcvi.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","text":"Farrell, S.F., B.. Collier, K.L. Skow, .M. Long, .J. Campomizzi, M.L. Morrison, B. Hays, R.N. Wilkins. 2013. Using LiDAR-derived structural vegetation characteristics develop high-resolution, small-scale, species distribution models conservation planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1 Laake, J.L., B.. Collier, M.L. Morrison, R.N. Wilkins. 2011. Point-based mark recapture distance sampling. Journal Agricultural, Biological Environmental Statistics 16: 389-408. Collier, B.., S.L. Farrell, K.L. Skow, . M. Long, .J. Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, R.N. Wilkins. 2013. Spatially explicit density endangered avian species disturbed landscape. Auk, Review.","code":""},{"path":"/reference/lfbcvi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Black-capped vireo mark-recapture distance sampling analysis — lfbcvi","text":"Bret Collier Jeff Laake","code":""},{"path":[]},{"path":"/reference/lfgcwa.html","id":null,"dir":"Reference","previous_headings":"","what":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","title":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","text":"data represent avian point count surveys conducted 453 point sample survey locations 24,000 (approx) live-fire region Fort Hood central Texas. Surveys conducted independent double observers (2 per survey occasion) maximum 3 paired survey histories, giving maximum 6 sample occasions (see MacKenzie et al. 2006, MacKenzie Royle 2005, Laake et al. 2011 various sample survey design details). point, surveyed 5 minutes (technically broken 3 time intervals 2, 2, 1 minutes; used ) noted detections observer collected distance observation within set distance bins (0-50, 50-100m; Laake et al. 2011) target species (Golden-cheeked warblers case) surveyor. primary focus use mark-recapture distance sampling methods estimate density Golden-cheeked warblers, estimate detection rates mark-recapture, distance, composite model.","code":""},{"path":"/reference/lfgcwa.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","text":"format data frame following covariate metrics. VisitNumber Visit number point Species Species designation, either Golden-cheeked warbler (GW) Black-capped Vireo (BV) Distance Distance measure, either NA (representing detection), median binned detection distances PairNumber ID value indicating observers paired sampling occasion Observer Observer ID, either primary(1), secondary (2) Detected Detection bird, either 1 = detected, 0 = detected Date Date survey since 15 March 2011, numeric value Pred Predicted occupancy value survey hexagon based Farrell et al. (2013) Category Region.Label categorization, see R package mrds help file details data structure Effort Amount survey effort point Day Number days since 15 March 2011, numeric value ObjectID Unique ID paired observations","code":""},{"path":"/reference/lfgcwa.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","text":"addition detailing analysis used Collier et al. (2013, Review), example documents use mrds avian point count surveys shows density models can incorporated occupancy models develop spatially explicit density surface maps. interested, distance sampling portion analysis, used conventional distance sampling (cds) multiple covariate distance sampling (mcds) uniform half-normal key functions. mark-recapture portion analysis, tended use covariates distance (median bin width), observer, date survey (days since 15 March 2011). combined mrds density estimates via Horvitz-Thompson styled estimator resource selection function gradient developed Farrell et al. (2013) estimated density ~3.14ha hexagonal grid across study area, provided density gradient Fort Hood. considerable data manipulation needed analysis structure data appropriately use mrds, rather wrap analysis single function, provided Golden-cheeked warbler Black-capped vireo analyses full detail. primary differences see changes model structures model outputs two species.","code":""},{"path":"/reference/lfgcwa.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","text":"Farrell, S.F., B.. Collier, K.L. Skow, .M. Long, .J. Campomizzi, M.L. Morrison, B. Hays, R.N. Wilkins. 2013. Using LiDAR-derived structural vegetation characteristics develop high-resolution, small-scale, species distribution models conservation planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1 Laake, J.L., B.. Collier, M.L. Morrison, R.N. Wilkins. 2011. Point-based mark recapture distance sampling. Journal Agricultural, Biological Environmental Statistics 16: 389-408. Collier, B.., S.L. Farrell, K.L. Skow, .M. Long, .J. Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, R.N. Wilkins. 2013. Spatially explicit density endangered avian species disturbed landscape. Auk, Review.","code":""},{"path":"/reference/lfgcwa.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Golden-cheeked warbler mark-recapture distance sampling analysis — lfgcwa","text":"Bret Collier Jeff Laake","code":""},{"path":[]},{"path":"/reference/logisticbyx.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic as a function of covariates — logisticbyx","title":"Logistic as a function of covariates — logisticbyx","text":"treats logistic function covariates; given covariate combination computes function covariate values range distances","code":""},{"path":"/reference/logisticbyx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic as a function of covariates — logisticbyx","text":"","code":"logisticbyx(distance, x, models, beta, point)"},{"path":"/reference/logisticbyx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic as a function of covariates — logisticbyx","text":"distance vector distance values x covariate data models model list beta logistic parameters point TRUE point transect model","code":""},{"path":"/reference/logisticbyx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logistic as a function of covariates — logisticbyx","text":"vector probabilities","code":""},{"path":"/reference/logisticbyx.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Logistic as a function of covariates — logisticbyx","text":"Jeff Laake","code":""},{"path":"/reference/logisticbyz.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic as a function of distance — logisticbyz","title":"Logistic as a function of distance — logisticbyz","text":"Treats logistic function distance; given distance computes function covariate values data.","code":""},{"path":"/reference/logisticbyz.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic as a function of distance — logisticbyz","text":"","code":"logisticbyz(x, distance, models, beta)"},{"path":"/reference/logisticbyz.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic as a function of distance — logisticbyz","text":"x covariate data distance single distance value models model list beta logistic parameters","code":""},{"path":"/reference/logisticbyz.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logistic as a function of distance — logisticbyz","text":"vector probabilities","code":""},{"path":"/reference/logisticbyz.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Logistic as a function of distance — logisticbyz","text":"Jeff Laake","code":""},{"path":"/reference/logisticdetfct.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic detection function — logisticdetfct","title":"Logistic detection function — logisticdetfct","text":"Logistic detection function","code":""},{"path":"/reference/logisticdetfct.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic detection function — logisticdetfct","text":"","code":"logisticdetfct(distance, theta, w, std = FALSE)"},{"path":"/reference/logisticdetfct.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic detection function — logisticdetfct","text":"distance perpendicular distance vector theta scale parameters w scale covariate matrix std TRUE uses scale=1 routine returns vector probabilities observation detected given specified distance assuming g(0)=1 (ie standard line transect detection function).","code":""},{"path":"/reference/logisticdupbyx.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic for duplicates as a function of covariates — logisticdupbyx","title":"Logistic for duplicates as a function of covariates — logisticdupbyx","text":"Treats logistic duplicates function covariate z; given z computes function covariate values range distances.","code":""},{"path":"/reference/logisticdupbyx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic for duplicates as a function of covariates — logisticdupbyx","text":"","code":"logisticdupbyx(distance, x1, x2, models, beta, point)"},{"path":"/reference/logisticdupbyx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic for duplicates as a function of covariates — logisticdupbyx","text":"distance vector distance values x1 covariate data fct 1 x2 covariate data fct 2 models model list beta logistic parameters point TRUE point transect data","code":""},{"path":"/reference/logisticdupbyx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logistic for duplicates as a function of covariates — logisticdupbyx","text":"vector probabilities","code":""},{"path":"/reference/logisticdupbyx.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Logistic for duplicates as a function of covariates — logisticdupbyx","text":"Jeff Laake","code":""},{"path":"/reference/logisticdupbyx_fast.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast","title":"Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast","text":"logisticdupbyx, faster distance covariate (interactions distance occur.","code":""},{"path":"/reference/logisticdupbyx_fast.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast","text":"","code":"logisticdupbyx_fast(distance, x1, x2, models, beta, point, beta_distance)"},{"path":"/reference/logisticdupbyx_fast.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast","text":"distance vector distance values x1 linear predictor 1, without distance x2 linear predictor 2, without distance models model list beta logistic parameters point TRUE point transect data beta_distance parameter distance","code":""},{"path":"/reference/logisticdupbyx_fast.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Logistic for duplicates as a function of covariates (fast) — logisticdupbyx_fast","text":"David L Miller","code":""},{"path":"/reference/logit.html","id":null,"dir":"Reference","previous_headings":"","what":"Logit function — logit","title":"Logit function — logit","text":"Computes logit transformation.","code":""},{"path":"/reference/logit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logit function — logit","text":"","code":"logit(p)"},{"path":"/reference/logit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logit function — logit","text":"p probability","code":""},{"path":"/reference/logit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logit function — logit","text":"logit(p) returns [log(p/(1-p)]","code":""},{"path":"/reference/logit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Logit function — logit","text":"Jeff Laake","code":""},{"path":"/reference/logLik.ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"log-likelihood value for a fitted detection function — logLik.ddf","title":"log-likelihood value for a fitted detection function — logLik.ddf","text":"Extract log-likelihood fitted detection function.","code":""},{"path":"/reference/logLik.ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"log-likelihood value for a fitted detection function — logLik.ddf","text":"","code":"# S3 method for class 'ddf' logLik(object, ...)"},{"path":"/reference/logLik.ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"log-likelihood value for a fitted detection function — logLik.ddf","text":"object fitted detection function model object ... included S3 completeness, ignored","code":""},{"path":"/reference/logLik.ddf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"log-likelihood value for a fitted detection function — logLik.ddf","text":"numeric value giving log-likelihood two attributes: \"df\" \"degrees freedom\" model (number parameters) \"nobs\" number observations used fit model","code":""},{"path":"/reference/logLik.ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"log-likelihood value for a fitted detection function — logLik.ddf","text":"David L Miller","code":""},{"path":"/reference/mcds.html","id":null,"dir":"Reference","previous_headings":"","what":"MCDS function definition — mcds","title":"MCDS function definition — mcds","text":"Creates model formula list multiple covariate distance sampling using values supplied call ddf","code":""},{"path":"/reference/mcds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"MCDS function definition — mcds","text":"","code":"mcds( formula = NULL, key = NULL, adj.series = NULL, adj.order = c(NULL), adj.scale = \"width\", adj.exp = FALSE, shape.formula = ~1 )"},{"path":"/reference/mcds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"MCDS function definition — mcds","text":"formula formula scale function key string identifying key function (currently either \"hn\" (half-normal),\"hr\" (hazard-rate), \"unif\" (uniform) \"gamma\" (gamma distribution) adj.series string identifying adjustment functions cos (Cosine), herm (Hermite polynomials), poly (simple polynomials) NULL adj.order vector order adjustment terms include adj.scale whether scale adjustment terms \"width\" \"scale\" adj.exp TRUE uses exp(adj) adjustment keep f(x)>0 shape.formula formula shape function","code":""},{"path":"/reference/mcds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"MCDS function definition — mcds","text":"formula list used define detection function model fct string \"mcds\" key key function string adj.series adjustment function string adj.order adjustment function orders adj.scale adjustment function scale type formula formula scale function shape.formula formula shape function","code":""},{"path":"/reference/mcds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"MCDS function definition — mcds","text":"Jeff Laake; Dave Miller","code":""},{"path":"/reference/mcds_dot_exe.html","id":null,"dir":"Reference","previous_headings":"","what":"Run MCDS.exe as a backend for mrds — MCDS.exe","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"Rather use R-based detection function fitting algorithms provided `mrds`, one can also use algorithm used Distance Windows, implemented binary file `MCDS.exe`. Note changes R-based optimizer introduced `mrds` version 3.0.0 unlikely result better estimates. option remains available, although may deprecated future release. make use facility, one must first download `MCDS.exe` binary, laid `Obtaining MCDS.exe`. binary installed, calls `ddf` , default, result using model fit using `MCDS.exe` R-based algorithm, one lower negative log-likelihood selected. almost cases, algorithms produce results, found edge one fails find likelihood maximum hence trying useful.","code":""},{"path":"/reference/mcds_dot_exe.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"may also cases `MCDS.exe` algorithm faster R-based one. circumstance, can choose run `MCDS.exe` algorithm via setting `ddf` argument control=list(optimizer='MCDS'). completeness, one can also choose use R-based algorithm setting control=list(optimizer='R'). information examples comparing R-based `MCDS.exe` algorithms, see examples pages https://examples.distancesampling.org/ running non-Windows operating system, can follow instructions `MCDS.exe` run using `wine`.","code":""},{"path":"/reference/mcds_dot_exe.html","id":"obtaining-mcds-exe","dir":"Reference","previous_headings":"","what":"Obtaining MCDS.exe","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"following code can used download `MCDS.exe` distance sampling website: download.file(\"http://distancesampling.org/R/MCDS.exe\", paste0(system.file(package=\"mrds\"),\"/MCDS.exe\"), mode = \"wb\") MCDS binary installed main directory local R mrds library. Alternatively, can copy `MCDS.exe` local Distance Windows installation prefer. location local mrds library main directory can found running following R: system.file(\"MCDS.exe\", package=\"mrds\").","code":""},{"path":"/reference/mcds_dot_exe.html","id":"running-mcds-exe-on-non-windows-platforms","dir":"Reference","previous_headings":"","what":"Running MCDS.exe on non-Windows platforms","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"tentatively tested mac currently considered largely experimental. One can still use MCDS.exe even running mac computer. one need install `wine` Windows emulator. important use version `wine` can run 32-bit programs. package attempt work `wine` binary use (detect installed), always work. case, location `wine` binary can specified `control` `list` provided `ddf` using `winebin` element supply `winebin` argument `ds` function. example, `wine` installed `/usr/bin/local/wine` can set `control$winebin` location use binary. macOS, can achieved using `homebrew` package management system installing `wine-crossover` package. may need change control$winebin `wine`, `wine64` `wine32on64`, depending system's setup. package tries work , likely handle corner cases. Currently untested Mac M1 systems.","code":""},{"path":"/reference/mcds_dot_exe.html","id":"stopping-using-mcds-exe","dir":"Reference","previous_headings":"","what":"Stopping using MCDS.exe","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"feature enabled, using `ddf` default run built-R optimizer `MCDS.exe`. disable behaviour, specify wish use via optimizer= option described . Alternatively, wish permanently stop using MCDS.exe, remove `MCDS.exe` binary file. can find folder running following R: system.file(\"MCDS.exe\", package=\"mrds\").","code":""},{"path":"/reference/mcds_dot_exe.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run MCDS.exe as a backend for mrds — MCDS.exe","text":"David L Miller Jonah McArthur","code":""},{"path":"/reference/mrds-package.html","id":null,"dir":"Reference","previous_headings":"","what":"Mark-Recapture Distance Sampling (mrds) — mrds-package","title":"Mark-Recapture Distance Sampling (mrds) — mrds-package","text":"package implements mark-recapture distance sampling methods described D.L. Borchers, W. Zucchini Fewster, R.M. (1988), \"Mark-recapture models line transect surveys\", Biometrics 54: 1207-1220. Laake, J.L. (1999) \"Distance sampling independent observers: Reducing bias heterogeneity weakening conditional independence assumption.\" Amstrup, G.W., Garner, S.C., Laake, J.L., Manly, B.F.J., McDonald, L.L. Robertson, D.G. (eds) \"Marine mammal survey assessment methods\", Balkema, Rotterdam: 137-148 Borchers, D.L., Laake, J.L., Southwell, C. Paxton, C.L.G. \"Accommodating unmodelled heterogeneity double-observer distance sampling surveys\". 2006. Biometrics 62:372-378.)","code":""},{"path":"/reference/mrds-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Mark-Recapture Distance Sampling (mrds) — mrds-package","text":"Examples distance sampling analyses available http://examples.distancesampling.org/. help distance sampling package, Google Group https://groups.google.com/forum/#!forum/distance-sampling.","code":""},{"path":"/reference/mrds-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Mark-Recapture Distance Sampling (mrds) — mrds-package","text":"Jeff Laake , David Borchers , Len Thomas , David L. Miller , Jon Bishop , Felix Petersma ","code":""},{"path":"/reference/mrds_opt.html","id":null,"dir":"Reference","previous_headings":"","what":"Tips on optimisation issues in mrds models — mrds_opt","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"Occasionally fitting `mrds` model one can run optimisation issues. general problems can quite complex \"quick fixes\" may work. come problems fixed tips, feel results dubious please go ahead contact package authors.","code":""},{"path":"/reference/mrds_opt.html","id":"debug-mode","dir":"Reference","previous_headings":"","what":"Debug mode","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"One can obtain debug output stage optimisation using showit option. set via control, adding control=list(showit=3) gives highest level debug output (setting showit 1 2 gives less output).","code":""},{"path":"/reference/mrds_opt.html","id":"re-scaling-covariates","dir":"Reference","previous_headings":"","what":"Re-scaling covariates","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"Sometimes convergence issues covariate (MCDS) models caused values covariate large, rescaling covariate necessary. Simply scaling standard deviation covariate can help (e.g. dat$size.scaled <- dat$scale/sd(dat$scale) covariate size, including size.scaled model instead size). important note one needs use original covariate (size) computing Horvitz-Thompson estimates population size group size used estimate. .e. use unscaled size numerator H-T estimator.","code":""},{"path":"/reference/mrds_opt.html","id":"factor-levels","dir":"Reference","previous_headings":"","what":"Factor levels","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"default R set base factor level label comes first alphabetically. Sometimes can issue factor level corresponds subset data observations. can lead large uncertainty estimates (CVs) model parameters. One way around use relevel set base level level observations.","code":""},{"path":"/reference/mrds_opt.html","id":"initial-values","dir":"Reference","previous_headings":"","what":"Initial values","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"Initial (starting) values dsmodel can set via initial element control list. initial list elements scale, shape adjustment, corresponding associated parameters. model covariates scale shape elements vectors parameter initial values order specific model formula (using showit good check correct order). Adjustment starting values order order term (cosine order 2 cosine order 3 terms). One way obtaining starting values fit simpler model first (say fewer covariates adjustments) use starting values simpler model corresponding parameters. Another alternative obtain starting values fit model (submodel) using Distance Windows. Note Distance reports scale parameter (intercept covariate model) exponential scale, one must log supplying ddf.","code":""},{"path":"/reference/mrds_opt.html","id":"bounds","dir":"Reference","previous_headings":"","what":"Bounds","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"One can change upper lower bounds dsmodel parameters. specify largest smallest values individual parameters can . placing constraints parameters, possible \"temper\" optimisation problem, making fitting possible. , one uses control list, elements upperbounds lowerbounds. case, upperbounds lowerbounds vectors, one can think vectors shape, scale adjustment \"Initial values\" section , concatenated order. one occur (e.g. shape parameter) simple omitted vector.","code":""},{"path":"/reference/mrds_opt.html","id":"conventional-distance-sampling-optimizer-choice","dir":"Reference","previous_headings":"","what":"Conventional distance sampling optimizer choice","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"key function plus adjustment approach Conventional Distance Sampling (CDS) can sometimes run issues sensible constrain fitted detection function monotonic non-increasing (.e., flat going ) increasing distance - finding maximum constrained likelihood difficult task without constraints. several options within `ddf` control argument may help difficulties encountered. documented ddf manual page, mentioned . One potential strategy (mentioned ) use better starting values optimization. mono.startvals set TRUE detection function first fit without adjustments resulting scale (shape) estimates used starting values model adjustments. even finer control, initial option can used documented . Another potential thing change constraint solver used. `mrds` v 3.0.0 new constraint solver, `slsqp`, included default. found work better solver previously used (`solnp`) needed solver can specified using mono.method option control argument `ddf`. also possible use optimizer implemented Distance Windows downloading separate binary - see manual page mcds_dot_exe. specified, also used Multiple Covariate Distance Sampling (MCDS) analyses.","code":""},{"path":"/reference/mrds_opt.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tips on optimisation issues in mrds models — mrds_opt","text":"David L. Miller ","code":""},{"path":"/reference/NCovered.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute estimated abundance in covered (sampled) region — NCovered","title":"Compute estimated abundance in covered (sampled) region — NCovered","text":"Generic function computes abundance within covered region. calls method (class) specific functions computation.","code":""},{"path":"/reference/NCovered.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute estimated abundance in covered (sampled) region — NCovered","text":"","code":"NCovered(par, model = NULL, group = TRUE)"},{"path":"/reference/NCovered.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute estimated abundance in covered (sampled) region — NCovered","text":"par parameter values (used computing derivatives wrt parameter uncertainty); NULL parameter values model used model ddf model object group TRUE computes group abundance FALSE individual abundance","code":""},{"path":"/reference/NCovered.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute estimated abundance in covered (sampled) region — NCovered","text":"abundance estimate","code":""},{"path":"/reference/NCovered.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute estimated abundance in covered (sampled) region — NCovered","text":"Jeff Laake","code":""},{"path":"/reference/nlminb_wrapper.html","id":null,"dir":"Reference","previous_headings":"","what":"Wrapper around nlminb — nlminb_wrapper","title":"Wrapper around nlminb — nlminb_wrapper","text":"wrapper around nlminb use scaling, available optimx.","code":""},{"path":"/reference/nlminb_wrapper.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Wrapper around nlminb — nlminb_wrapper","text":"","code":"nlminb_wrapper( par, ll, ugr = NULL, lower = NULL, upper = NULL, mcontrol, hess = NULL, ddfobj, data, ... )"},{"path":"/reference/nlminb_wrapper.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Wrapper around nlminb — nlminb_wrapper","text":"par starting parameters ll log likelihood function ugr gradient function lower lower bounds parameters upper upper bounds parameters mcontrol control options hess hessian function ddfobj detection function specification object data data ... anything else pass ll","code":""},{"path":"/reference/nlminb_wrapper.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Wrapper around nlminb — nlminb_wrapper","text":"optimx object","code":""},{"path":"/reference/nlminb_wrapper.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Wrapper around nlminb — nlminb_wrapper","text":"David L Miller, modified optimx.run JC Nash, R Varadhan, G Grothendieck.","code":""},{"path":"/reference/p.det.html","id":null,"dir":"Reference","previous_headings":"","what":"Double-platform detection probability — p.det","title":"Double-platform detection probability — p.det","text":"Computes detection probability detection function computed mark-recapture data possibly different link functions.","code":""},{"path":"/reference/p.det.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Double-platform detection probability — p.det","text":"","code":"p.det(dpformula, dplink, dppars, dpdata)"},{"path":"/reference/p.det.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Double-platform detection probability — p.det","text":"dpformula formula detection function dplink link function (\"logit\",\"loglog\",\"cloglog\") dppars parameter vector dpdata double platform data","code":""},{"path":"/reference/p.det.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Double-platform detection probability — p.det","text":"vector predicted detection probabilities","code":""},{"path":"/reference/p.det.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Double-platform detection probability — p.det","text":"?????","code":""},{"path":"/reference/p.dist.table.html","id":null,"dir":"Reference","previous_headings":"","what":"Distribution of probabilities of detection — p.dist.table","title":"Distribution of probabilities of detection — p.dist.table","text":"Generate table frequencies probability detection detection function model. particularly useful employing covariates, can indicate detections small detection probabilities can unduly influential calculating abundance estimates.","code":""},{"path":"/reference/p.dist.table.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Distribution of probabilities of detection — p.dist.table","text":"","code":"p.dist.table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE) p_dist_table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE)"},{"path":"/reference/p.dist.table.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Distribution of probabilities of detection — p.dist.table","text":"object fitted detection function bins results binned proportion proportions returned well counts?","code":""},{"path":"/reference/p.dist.table.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Distribution of probabilities of detection — p.dist.table","text":"data.frame probability bins, counts (optionally) proportions. object attribute p_range contains range estimated detection probabilities","code":""},{"path":"/reference/p.dist.table.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Distribution of probabilities of detection — p.dist.table","text":"dht uses Horvitz-Thompson-like estimator, abundance estimates can sensitive errors estimated probabilities. estimator based \\(\\sum 1/ \\hat{P}_a(z_i)\\), means sensitivity greater smaller detection probabilities. rough guide, recommend method used say 5% \\(\\hat{P}_a(z_i)\\) less 0.2, less 0.1. conditions violated, truncation distance w can reduced. causes loss precision relative standard distance sampling without covariates.","code":""},{"path":"/reference/p.dist.table.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Distribution of probabilities of detection — p.dist.table","text":"Marques, F.F.C. S.T. Buckland. 2004. Covariate models detection function. : Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":"/reference/p.dist.table.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Distribution of probabilities of detection — p.dist.table","text":"David L Miller","code":""},{"path":"/reference/p.dist.table.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Distribution of probabilities of detection — p.dist.table","text":"","code":"if (FALSE) { # \\dontrun{ # try out the tee data data(book.tee.data) egdata <- book.tee.data$book.tee.dataframe # fit model with covariates result <- ddf(dsmodel = ~mcds(key = \"hn\", formula = ~sex+size), data = egdata[egdata$observer==1, ], method = \"ds\", meta.data = list(width = 4)) # print table p.dist.table(result) # with proportions p.dist.table(result, proportion=TRUE) } # }"},{"path":"/reference/parse.optimx.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse optimx results and present a nice object — parse.optimx","title":"Parse optimx results and present a nice object — parse.optimx","text":"Take resulting object call optimx make object mrds wants talk .","code":""},{"path":"/reference/parse.optimx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse optimx results and present a nice object — parse.optimx","text":"","code":"parse.optimx(lt, lnl.last, par.last)"},{"path":"/reference/parse.optimx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse optimx results and present a nice object — parse.optimx","text":"lt optimx object lnl.last last value log likelihood par.last last value parameters","code":""},{"path":"/reference/parse.optimx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse optimx results and present a nice object — parse.optimx","text":"lt object can used later ","code":""},{"path":"/reference/pdot.dsr.integrate.logistic.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic","title":"Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic","text":"Computes probability object detected least one observer (pdot p_.) logistic detection function contains distance.","code":""},{"path":"/reference/pdot.dsr.integrate.logistic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic","text":"","code":"pdot.dsr.integrate.logistic( right, width, beta, x, integral.numeric, BT, models, GAM = FALSE, rem = FALSE, point = FALSE )"},{"path":"/reference/pdot.dsr.integrate.logistic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic","text":"right either integration range binned data (vector 2) rightmost value integration (0 right) width transect width beta parameters logistic detection function x data matrix integral.numeric set TRUE unless data binned (done fct) model distance linear (eg distance^2), integral.numeric FALSE compute integral analytically. FALSE .linear.logistic function TRUE. BT FALSE except trial configuration; BT stands Buckland-Turnock initially proposed trial configuration dual observers models list models including g0model GAM used present. idea able use GAM g(0) portion detection function; always F rem TRUE removal configuration used removed pulled function calls. Originally thought pdot integral differ io formula. thing differs removal p(2|1)=1. Observer 2 sees everything seen observer 1, point TRUE point transects","code":""},{"path":"/reference/pdot.dsr.integrate.logistic.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute probability that a object was detected by at least one observer — pdot.dsr.integrate.logistic","text":"Jeff Laake","code":""},{"path":"/reference/plot.det.tables.html","id":null,"dir":"Reference","previous_headings":"","what":"Observation detection tables — plot.det.tables","title":"Observation detection tables — plot.det.tables","text":"Plot tables created det.tables. Produces series tables dual observer data shows number missed detected observer within defined distance classes.","code":""},{"path":"/reference/plot.det.tables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Observation detection tables — plot.det.tables","text":"","code":"# S3 method for class 'det.tables' plot( x, which = 1:6, angle = NULL, density = NULL, col1 = \"white\", col2 = \"lightgrey\", new = TRUE, ... )"},{"path":"/reference/plot.det.tables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Observation detection tables — plot.det.tables","text":"x object returned det.tables items x plot (vector values 1:6) angle shading angle hatching density shading density hatching col1 plotting colour total histogram bars. col2 plotting colour subset histogram bars. new TRUE new plotting window plot ... graphical parameters, passed plotting functions","code":""},{"path":"/reference/plot.det.tables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Observation detection tables — plot.det.tables","text":"Just plots.","code":""},{"path":"/reference/plot.det.tables.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Observation detection tables — plot.det.tables","text":"Plots produced follows (controlled argument): 1 Detected either observer/Detected observer 1 2 Detected either observer/Detected observer 2 3 Seen observers 4 Seen either observer 5 Detected observer 2/Detected observer 1 | 2 6 Detected observer 1/Detected observer 2 | 1","code":""},{"path":"/reference/plot.det.tables.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Observation detection tables — plot.det.tables","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/plot.det.tables.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Observation detection tables — plot.det.tables","text":"","code":"# \\donttest{ data(book.tee.data) region <- book.tee.data$book.tee.region egdata <- book.tee.data$book.tee.dataframe samples <- book.tee.data$book.tee.samples obs <- book.tee.data$book.tee.obs xx <- ddf(mrmodel=~glm(formula=~distance*observer), dsmodel = ~mcds(key = \"hn\", formula = ~sex), data = egdata, method = \"io\", meta.data = list(width = 4)) tabs <- det.tables(xx,breaks=c(0,.5,1,2,3,4)) par(mfrow=c(2,3)) plot(tabs,which=1:6,new=FALSE) # }"},{"path":"/reference/plot.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"Plots fitted detection function(s) histogram observed distances compare visually fitted model data.","code":""},{"path":"/reference/plot.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"","code":"# S3 method for class 'ds' plot( x, which = 2, breaks = NULL, nc = NULL, jitter.v = rep(0, 3), showpoints = TRUE, subset = NULL, pl.col = \"lightgrey\", pl.den = NULL, pl.ang = NULL, main = NULL, pages = 0, pdf = FALSE, ylim = NULL, xlab = \"Distance\", ylab = NULL, ... )"},{"path":"/reference/plot.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"x fitted model ddf. index specify plots produced: breaks user defined breakpoints nc number equal width bins histogram jitter.v apply jitter points multiplying fitted value random draw normal distribution mean 1 sd jitter.v. showpoints logical variable; TRUE plots predicted value observation (conditional observed distance). subset subset data plot. pl.col colour histogram bars. pl.den shading density histogram bars. pl.ang shading angle histogram bars. main plot title. pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. pdf plot histogram distances PDF probability detection overlaid. Ignored (warning) line transect models. ylim vertical axis limits. xlab horizontal axis label (defaults \"Distance\"). ylab vertical axis label (default automatically set depending plot type). ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc).","code":""},{"path":"/reference/plot.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"Just plots.","code":""},{"path":"/reference/plot.ds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.ds arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":[]},{"path":"/reference/plot.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"Jeff Laake, Jon Bishop, David Borchers, David L Miller","code":""},{"path":"/reference/plot.ds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot fit of detection functions and histograms of data from distance sampling model — plot.ds","text":"","code":"# \\donttest{ # fit a model to the tee data data(book.tee.data) egdata <- book.tee.data$book.tee.dataframe xx <- ddf(dsmodel=~mcds(key=\"hn\", formula=~sex), data=egdata[egdata$observer==1, ], method=\"ds\", meta.data=list(width=4)) # not showing predicted probabilities plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), showpoints=FALSE) # two subsets plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==0) plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==1) # put both plots on one page plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), pages=1, which=1:2) # }"},{"path":"/reference/plot.io.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.io.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"","code":"# S3 method for class 'io.fi' plot( x, which = 1:6, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.io.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"x fitted model ddf index specify plots produced. Note order ignored plots produced order. breaks user define breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.io.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"Just plots.","code":""},{"path":"/reference/plot.io.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.io.fi arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.io.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"Jeff Laake, Jon Bishop, David Borchers, David L Miller","code":""},{"path":"/reference/plot.io.fi.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer model with full independence (io.fi) — plot.io.fi","text":"","code":"# \\donttest{ library(mrds) data(book.tee.data) egdata <- book.tee.data$book.tee.dataframe result.io.fi <- ddf(mrmodel=~glm(~distance), data = egdata, method = \"io.fi\", meta.data = list(width = 4)) # just plot everything plot(result.io.fi) # Plot primary and secondary unconditional detection functions on one page # and primary and secondary conditional detection functions on another plot(result.io.fi,which=c(1,2,5,6),pages=2) # }"},{"path":"/reference/plot.io.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.io.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"","code":"# S3 method for class 'io' plot( x, which = 1:6, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.io.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"x fitted model ddf index specify plots produced. Note order ignored plots produced order. breaks user define breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.io.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"Just plots","code":""},{"path":"/reference/plot.io.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.io.fi arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.io.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"Jeff Laake, Jon Bishop, David Borchers, David L Miller","code":""},{"path":"/reference/plot.io.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot fit of detection functions and histograms of data from distance sampling independent observer (io) model — plot.io","text":"","code":"# \\donttest{ library(mrds) data(book.tee.data) egdata <- book.tee.data$book.tee.dataframe result.io <- ddf(dsmodel=~cds(key = \"hn\"), mrmodel=~glm(~distance), data=egdata, method=\"io\", meta.data=list(width=4)) # just plot everything plot(result.io) # Plot primary and secondary unconditional detection functions on one page # and primary and secondary conditional detection functions on another plot(result.io,which=c(1,2,5,6),pages=2) # }"},{"path":"/reference/plot.rem.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.rem.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","text":"","code":"# S3 method for class 'rem.fi' plot( x, which = 1:3, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.rem.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","text":"x fitted model ddf index specify plots produced. breaks user defined breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.rem.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.rem.fi arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.rem.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem.fi","text":"Jeff Laake, Jon Bishop, David Borchers, David L Miller","code":""},{"path":"/reference/plot.rem.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.rem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","text":"","code":"# S3 method for class 'rem' plot( x, which = 1:3, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.rem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","text":"x fitted model ddf index specify plots produced. breaks user define breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.rem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.rem arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.rem.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from removal distance sampling model — plot.rem","text":"Jeff Laake, Jon Bishop, David Borchers, David L Miller","code":""},{"path":"/reference/plot.trial.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.trial.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","text":"","code":"# S3 method for class 'trial.fi' plot( x, which = 1:2, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.trial.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","text":"x fitted model ddf index specify plots produced. breaks user define breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.trial.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.io.fi arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.trial.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial.fi","text":"Jeff Laake, Jon Bishop, David Borchers","code":""},{"path":"/reference/plot.trial.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","text":"Plots fitted detection functions distance sampling model histograms distances (unconditional detection functions) proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data.","code":""},{"path":"/reference/plot.trial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","text":"","code":"# S3 method for class 'trial' plot( x, which = 1:2, breaks = NULL, nc = NULL, maintitle = \"\", showlines = TRUE, showpoints = TRUE, ylim = c(0, 1), angle = NULL, density = NULL, col = \"lightgrey\", jitter = NULL, divisions = 25, pages = 0, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot.trial.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","text":"x fitted model ddf index specify plots produced. breaks user define breakpoints nc number equal-width bins histogram maintitle main title line plot showlines logical variable; TRUE line representing average detection probability plotted showpoints logical variable; TRUE plots predicted value observation ylim range vertical axis; defaults (0,1) angle shading angle histogram bars. density shading density histogram bars. col colour histogram bars. jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. divisions number divisions averaging line values; default = 25 pages number pages spread plots. example, pages=1 plots displayed one page. Default 0, prompts user next plot displayed. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot.trial.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","text":"structure histogram can controlled user-defined arguments nc breaks. observation specific detection probabilities along line representing fitted average detection probability. intended user call plot.io.fi arguments documented . Instead generic plot command used call appropriate function based class ddf object.","code":""},{"path":"/reference/plot.trial.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot fit of detection functions and histograms of data from distance sampling trial observer model — plot.trial","text":"Jeff Laake, Jon Bishop, David Borchers","code":""},{"path":"/reference/plot_cond.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot conditional detection function from distance sampling model — plot_cond","title":"Plot conditional detection function from distance sampling model — plot_cond","text":"Plot proportion observations detected within distance intervals (conditional detection functions) compare visually fitted model data. Internal function called plot methods.","code":""},{"path":"/reference/plot_cond.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot conditional detection function from distance sampling model — plot_cond","text":"","code":"plot_cond( obs, xmat, gxvalues, model, nc, breaks, finebr, showpoints, showlines, maintitle, ylim, angle = -45, density = 20, col = \"black\", jitter = NULL, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot_cond.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot conditional detection function from distance sampling model — plot_cond","text":"obs observer code xmat processed data gxvalues detection function values observation model fitted model ddf nc number equal-width bins histogram breaks user define breakpoints finebr fine break values line averaged showpoints logical variable; TRUE plots predicted value observation showlines logical variable; TRUE plots average predicted value line maintitle main title line plot ylim range y axis (default c(0,1)) angle shading angle hatching density shading density hatching col plotting colour jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot_cond.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot conditional detection function from distance sampling model — plot_cond","text":"Jeff Laake, Jon Bishop, David Borchers","code":""},{"path":"/reference/plot_layout.html","id":null,"dir":"Reference","previous_headings":"","what":"Layout for plot methods in mrds — plot_layout","title":"Layout for plot methods in mrds — plot_layout","text":"function paging, using devAskNewPage(). means can just call plots R make prompt us Warning, function side effects! modifies devAskNewPage!","code":""},{"path":"/reference/plot_layout.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Layout for plot methods in mrds — plot_layout","text":"","code":"plot_layout(which, pages)"},{"path":"/reference/plot_layout.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Layout for plot methods in mrds — plot_layout","text":"plots created pages number pages span plots across","code":""},{"path":"/reference/plot_layout.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Layout for plot methods in mrds — plot_layout","text":"Code stolen modified plot.R mgcv Simon Wood","code":""},{"path":"/reference/plot_layout.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Layout for plot methods in mrds — plot_layout","text":"David L. Miller, based code Simon N. Wood","code":""},{"path":"/reference/plot_uncond.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot unconditional detection function from distance sampling model — plot_uncond","title":"Plot unconditional detection function from distance sampling model — plot_uncond","text":"Plots unconditional detection function observer=obs observations overlays histogram, average detection function values individual observations data. Internal function called plot methods.","code":""},{"path":"/reference/plot_uncond.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot unconditional detection function from distance sampling model — plot_uncond","text":"","code":"plot_uncond( model, obs, xmat, gxvalues, nc, finebr, breaks, showpoints, showlines, maintitle, ylim, return.lines = FALSE, angle = -45, density = 20, col = \"black\", jitter = NULL, xlab = \"Distance\", ylab = \"Detection probability\", subtitle = TRUE, ... )"},{"path":"/reference/plot_uncond.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot unconditional detection function from distance sampling model — plot_uncond","text":"model fitted model ddf obs value observer plot xmat processed data gxvalues detection function values observation nc number equal-width bins histogram finebr fine break values line averaged breaks user define breakpoints showpoints logical variable; TRUE plots predicted value observation showlines logical variable; TRUE plots average predicted value line maintitle main title line plot ylim range y axis; defaults (0,1) return.lines TRUE, returns values line angle shading angle hatching density shading density hatching col plotting colour jitter scaling option plotting points. Jitter applied points multiplying fitted value random draw normal distribution mean 1 sd jitter. xlab label x-axis ylab label y-axis subtitle TRUE, shows plot type sub-title ... graphical parameters, passed plotting functions (plot, hist, lines, points, etc)","code":""},{"path":"/reference/plot_uncond.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot unconditional detection function from distance sampling model — plot_uncond","text":"return.lines==TRUE returns dataframe average.line otherwise just plots","code":""},{"path":"/reference/plot_uncond.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot unconditional detection function from distance sampling model — plot_uncond","text":"Jeff Laake, Jon Bishop, David Borchers","code":""},{"path":"/reference/predict.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Predictions from mrds models — predict.ds","title":"Predictions from mrds models — predict.ds","text":"Predict detection probabilities (effective strip widths/effective areas detection) fitted distance sampling model using either original data (.e. \"fitted\" values) using new data.","code":""},{"path":"/reference/predict.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Predictions from mrds models — predict.ds","text":"","code":"# S3 method for class 'ds' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, esw=FALSE, se.fit=FALSE, ...) # S3 method for class 'io.fi' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, integrate=FALSE, ...) # S3 method for class 'io' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, ...) # S3 method for class 'trial' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, ...) # S3 method for class 'trial.fi' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, integrate=FALSE, ...) # S3 method for class 'rem' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, ...) # S3 method for class 'rem.fi' predict(object, newdata=NULL, compute=FALSE, int.range=NULL, integrate=FALSE, ...)"},{"path":"/reference/predict.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Predictions from mrds models — predict.ds","text":"object ddf model object. newdata new data.frame prediction, must include column called \"distance\". compute TRUE compute values use fitted values stored model object. int.range integration range variable range analysis; either vector 2 column matrix. esw TRUE, returns effective strip half-width (effective area detection point transect models) integral 0 truncation distance (width) \\(p(y)dy\\); otherwise returns integral 0 truncation width \\(p(y)\\pi(y)\\) \\(\\pi(y)=1/w\\) lines \\(\\pi(y)=2r/w^2\\) points. se.fit *.ds models , generate standard errors predicted probabilities detection (ESW esw=TRUE), stored se.fit element ... S3 consistency integrate *.fi methods, see Details .","code":""},{"path":"/reference/predict.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Predictions from mrds models — predict.ds","text":"exceptions , value list single element: fitted, vector average detection probabilities esw values observation original data ornewdata predict.ds, se.fit=TRUE additional element $se.fit, contains standard errors probabilities detection ESW. predict.io.fi,predict.trial.fi,predict.rem.fi integrate=TRUE, value list one element: fitted, vector integrated (average) detection probabilities observation original data newdata. predict.io.fi, predict.trial.fi, predict.rem.fi integrate=FALSE, value list following elements: fitted \\(p(y)\\) values p1 \\(p_{1|2}(y)\\), conditional detection probability observer 1 p2 \\(p_{2|1}(y)\\), conditional detection probability observer 2 fitted \\(p_.(y) = p_{1|2}(y) + p_{2|1}(y) - p_{1|2}(y) * p_{2|1}(y)\\), conditional detection probability seen either observer","code":""},{"path":"/reference/predict.ds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Predictions from mrds models — predict.ds","text":"first 4 arguments predict function. latter 2 specific certain functions. line transects, effective strip half-width (esw=TRUE) integral fitted detection function either 0 W specified int.range. predicted detection probability average probability simply integral divided distance range. point transect models, esw=TRUE calculates effective area detection (commonly referred \"nu\", integral 2/width^2 * rg(r). Fitted detection probabilities stored model object returned unless compute=TRUE newdata specified. compute=TRUE used estimate numerical derivatives use delta method approximations variance. method=\"io.fi\" method=\"trial.fi\" integrate=FALSE, predict returns value conditional detection probability integrate=TRUE, returns average conditional detection probability integrating x (distance) respect uniform distribution. Note ordering returned results new data supplied (\"fitted\" values) necessarily data supplied ddf, data (hence results predict) sorted object ID (object) observer ID (observer).","code":""},{"path":"/reference/predict.ds.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Predictions from mrds models — predict.ds","text":"function called generic function predict appropriate ddf model object. can called directly user, typically safest use predict calls appropriate function based type model.","code":""},{"path":[]},{"path":"/reference/predict.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Predictions from mrds models — predict.ds","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/print.ddf.gof.html","id":null,"dir":"Reference","previous_headings":"","what":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","title":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","text":"Provides formatted output results goodness fit tests: chi-square, Kolmogorv-Smirnov Cramer-von Mises test appropriate.","code":""},{"path":"/reference/print.ddf.gof.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","text":"","code":"# S3 method for class 'ddf.gof' print(x, digits = 3, ...)"},{"path":"/reference/print.ddf.gof.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","text":"x result call ddf.gof digits number digits round chi-squared table values ... unused unspecified arguments generic print","code":""},{"path":"/reference/print.ddf.gof.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","text":"None","code":""},{"path":[]},{"path":"/reference/print.ddf.gof.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prints results of goodness of fit tests for detection functions — print.ddf.gof","text":"Jeff Laake","code":""},{"path":"/reference/print.ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"Simple pretty printer for distance sampling analyses — print.ddf","title":"Simple pretty printer for distance sampling analyses — print.ddf","text":"Simply prints summary model fitted. detailed information see summary.","code":""},{"path":"/reference/print.ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simple pretty printer for distance sampling analyses — print.ddf","text":"","code":"# S3 method for class 'ddf' print(x, ...)"},{"path":"/reference/print.ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simple pretty printer for distance sampling analyses — print.ddf","text":"x ddf object ... passed , just S3 compatibility.","code":""},{"path":"/reference/print.ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simple pretty printer for distance sampling analyses — print.ddf","text":"David L. Miller","code":""},{"path":"/reference/print.det.tables.html","id":null,"dir":"Reference","previous_headings":"","what":"Print results of observer detection tables — print.det.tables","title":"Print results of observer detection tables — print.det.tables","text":"Provides formatted output detection tables","code":""},{"path":"/reference/print.det.tables.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print results of observer detection tables — print.det.tables","text":"","code":"# S3 method for class 'det.tables' print(x, ...)"},{"path":"/reference/print.det.tables.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print results of observer detection tables — print.det.tables","text":"x result call ddf ... unused unspecified arguments generic print","code":""},{"path":"/reference/print.det.tables.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print results of observer detection tables — print.det.tables","text":"None","code":""},{"path":[]},{"path":"/reference/print.det.tables.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print results of observer detection tables — print.det.tables","text":"Jeff Laake","code":""},{"path":"/reference/print.dht.html","id":null,"dir":"Reference","previous_headings":"","what":"Prints density and abundance estimates — print.dht","title":"Prints density and abundance estimates — print.dht","text":"Outputs summary statistics, abundance density region () optionally correlation matrix one region.","code":""},{"path":"/reference/print.dht.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Prints density and abundance estimates — print.dht","text":"","code":"# S3 method for class 'dht' print(x, cor = FALSE, bysample = FALSE, vcmatrices = FALSE, ...)"},{"path":"/reference/print.dht.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Prints density and abundance estimates — print.dht","text":"x dht object results call dht specific ddf object cor TRUE outputs correlation matrix estimates bysample TRUE, prints results sample vcmatrices TRUE, prints variance-covariance matrices ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/print.dht.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Prints density and abundance estimates — print.dht","text":"None","code":""},{"path":[]},{"path":"/reference/print.dht.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Prints density and abundance estimates — print.dht","text":"Jeff Laake","code":""},{"path":"/reference/print.p_dist_table.html","id":null,"dir":"Reference","previous_headings":"","what":"Print distribution of probabilities of detection — print.p_dist_table","title":"Print distribution of probabilities of detection — print.p_dist_table","text":"Just pretty printer table probabilities detection.","code":""},{"path":"/reference/print.p_dist_table.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print distribution of probabilities of detection — print.p_dist_table","text":"","code":"# S3 method for class 'p_dist_table' print(x, digits = 2, ...)"},{"path":"/reference/print.p_dist_table.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print distribution of probabilities of detection — print.p_dist_table","text":"x output p_dist_table digits number significant digits print ... arguments passed print.data.frame","code":""},{"path":"/reference/print.p_dist_table.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print distribution of probabilities of detection — print.p_dist_table","text":"just prints table range ps","code":""},{"path":"/reference/print.p_dist_table.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print distribution of probabilities of detection — print.p_dist_table","text":"David L Miller","code":""},{"path":"/reference/print.summary.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.ds","title":"Print summary of distance detection function model object — print.summary.ds","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.ds","text":"","code":"# S3 method for class 'summary.ds' print(x, ...)"},{"path":"/reference/print.summary.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.ds","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.ds","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.io.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.io.fi","title":"Print summary of distance detection function model object — print.summary.io.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.io.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.io.fi","text":"","code":"# S3 method for class 'summary.io.fi' print(x, ...)"},{"path":"/reference/print.summary.io.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.io.fi","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.io.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.io.fi","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.io.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.io","title":"Print summary of distance detection function model object — print.summary.io","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.io.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.io","text":"","code":"# S3 method for class 'summary.io' print(x, ...)"},{"path":"/reference/print.summary.io.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.io","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.io.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.io","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.rem.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.rem.fi","title":"Print summary of distance detection function model object — print.summary.rem.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.rem.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.rem.fi","text":"","code":"# S3 method for class 'summary.rem.fi' print(x, ...)"},{"path":"/reference/print.summary.rem.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.rem.fi","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.rem.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.rem.fi","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.rem.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.rem","title":"Print summary of distance detection function model object — print.summary.rem","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.rem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.rem","text":"","code":"# S3 method for class 'summary.rem' print(x, ...)"},{"path":"/reference/print.summary.rem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.rem","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.rem.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.rem","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.trial.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.trial.fi","title":"Print summary of distance detection function model object — print.summary.trial.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.trial.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.trial.fi","text":"","code":"# S3 method for class 'summary.trial.fi' print(x, ...)"},{"path":"/reference/print.summary.trial.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.trial.fi","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.trial.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.trial.fi","text":"Jeff Laake","code":""},{"path":"/reference/print.summary.trial.html","id":null,"dir":"Reference","previous_headings":"","what":"Print summary of distance detection function model object — print.summary.trial","title":"Print summary of distance detection function model object — print.summary.trial","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error. printed depends corresponding call summary.","code":""},{"path":"/reference/print.summary.trial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print summary of distance detection function model object — print.summary.trial","text":"","code":"# S3 method for class 'summary.trial' print(x, ...)"},{"path":"/reference/print.summary.trial.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print summary of distance detection function model object — print.summary.trial","text":"x summary ddf model object ... unspecified unused arguments S3 consistency","code":""},{"path":[]},{"path":"/reference/print.summary.trial.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print summary of distance detection function model object — print.summary.trial","text":"Jeff Laake","code":""},{"path":"/reference/prob.deriv.html","id":null,"dir":"Reference","previous_headings":"","what":"Derivatives for variance of average p and average p(0) variance — prob.deriv","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"Used call DeltaMethod prob.se get first derivatives","code":""},{"path":"/reference/prob.deriv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"","code":"prob.deriv(par, model, parfct, observer = NULL, fittedmodel = NULL)"},{"path":"/reference/prob.deriv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"par detection function parameter values model ddf model object parfct function detection probabilities; currently average (covariates) detection probability p integrated distance average (covariates) detection probability distance 0; p(0) observer 1,2,3 primary, secondary, duplicates average p(0); passed fct fittedmodel full fitted ddf model trial.fi io.fi called trial io respectively","code":""},{"path":"/reference/prob.deriv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"Vector values fct specified parameter values","code":""},{"path":"/reference/prob.deriv.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"Need add equations think exist texts. probably checked simulation.","code":""},{"path":[]},{"path":"/reference/prob.deriv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Derivatives for variance of average p and average p(0) variance — prob.deriv","text":"Jeff Laake","code":""},{"path":"/reference/prob.se.html","id":null,"dir":"Reference","previous_headings":"","what":"Average p and average p(0) variance — prob.se","title":"Average p and average p(0) variance — prob.se","text":"Computes components variance average p=n/N average p(0) weights based empirical covariate distribution, contains covariates.","code":""},{"path":"/reference/prob.se.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Average p and average p(0) variance — prob.se","text":"","code":"prob.se(model, fct, vcov, observer = NULL, fittedmodel = NULL)"},{"path":"/reference/prob.se.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Average p and average p(0) variance — prob.se","text":"model ddf model object fct function detection probabilities; currently average (covariates) detection probability p integrated distance average (covariates) detection probability distance 0; p(0) vcov variance-covariance matrix parameter estimates observer 1,2,3 primary, secondary, duplicates average p(0); passed fct fittedmodel full fitted ddf model trial.fi io.fi called trial io respectively","code":""},{"path":"/reference/prob.se.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Average p and average p(0) variance — prob.se","text":"var variance partial partial derivatives parameters respect fct covar covariance n average p p(0)","code":""},{"path":"/reference/prob.se.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Average p and average p(0) variance — prob.se","text":"Need add equations think exist texts. probably checked simulation.","code":""},{"path":[]},{"path":"/reference/prob.se.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Average p and average p(0) variance — prob.se","text":"Jeff Laake","code":""},{"path":"/reference/process.data.html","id":null,"dir":"Reference","previous_headings":"","what":"Process data for fitting distance sampling detection function — process.data","title":"Process data for fitting distance sampling detection function — process.data","text":"Sets dataframe basic error checking. Adds needed fields dataframe meta.data.","code":""},{"path":"/reference/process.data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Process data for fitting distance sampling detection function — process.data","text":"","code":"process.data(data, meta.data = list(), check = TRUE)"},{"path":"/reference/process.data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Process data for fitting distance sampling detection function — process.data","text":"data dataframe object meta.data meta.data options; see ddf description check TRUE check data errors mrds structure; method=\"ds\" check=FALSE","code":""},{"path":"/reference/process.data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Process data for fitting distance sampling detection function — process.data","text":"xmat processed data.frame added fields meta.data meta.data list","code":""},{"path":"/reference/process.data.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Process data for fitting distance sampling detection function — process.data","text":"function number error checking tasks, creating fields adding meta.data including: 1) check=TRUE, check make sure record structure okay mrds data. number primary records (observer=1) must equal number secondary records (observer=2). Also, field dataframe created timesseen counts number times object detected 0,1,2; timesseen=0 record tossed analysis. Also differences data (distance, size, covariates) observer 1 2 warning issued analysis may fail. code assumes values observers. 2) Based presence fields distbegin distend, determination made whether data analysis based binned distances field binned created, TRUE distance observation binned. assigning observation allows analysis mixture binned unbinned distances. 4) Data restricted distances greater width less left values specified meta.data. specified left defaults 0 width defaults largest distance measurement. 5) Determine integration range (int.begin int.end specified observations. , add structure meta.data. integration range typically used aerial surveys altitude varies strip width (left width) changes change altitude. 6) Fields defined factors cleaned unused levels eliminated. 7) restrictions placed data, eliminated data, function stops error message","code":""},{"path":"/reference/process.data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Process data for fitting distance sampling detection function — process.data","text":"Jeff Laake","code":""},{"path":"/reference/pronghorn.html","id":null,"dir":"Reference","previous_headings":"","what":"Pronghorn aerial survey data from Wyoming — pronghorn","title":"Pronghorn aerial survey data from Wyoming — pronghorn","text":"Detections pronghorn fixed-wing aerial surveys Southeastern Wyoming using four angular bins defined strut marks. Illustrates data altitude ground level (AGL) varies survey.","code":""},{"path":"/reference/pronghorn.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Pronghorn aerial survey data from Wyoming — pronghorn","text":"data frame 660 observations following 5 variables. STRATUM numeric vector direction factor levels N S representing survey direction AGL height ground level Band factor levels B C D represent angular bands breaks 35.42,44.56,51.52,61.02,70.97 degrees. angles set based selected distance bins based target AGL. cluster number pronghorn observed cluster","code":""},{"path":"/reference/pronghorn.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Pronghorn aerial survey data from Wyoming — pronghorn","text":"Data provided courtesy Rich Guenzel Wyoming Game Fish.","code":""},{"path":"/reference/pronghorn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Pronghorn aerial survey data from Wyoming — pronghorn","text":"record observed cluster pronghorn. data provide stratum observation, direction travel, AGL time observation, angular bin contained center pronghorn cluster(group), number pronghorn group. angular bins defined combination two window five wing strut marks define bin cutpoints perpendicular ground distances 0-65, 65-90, 90-115, 115-165 165-265 meters plane 300' (91.4 meters) ground level. inner band considered blind region due obstruction view beneath plane; thus th line offset 65 meters underneath plane.","code":""},{"path":"/reference/pronghorn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Pronghorn aerial survey data from Wyoming — pronghorn","text":"Laake, J., R. J. Guenzel, J. L. Bengtson, P. Boveng, M. Cameron, M. B. Hanson. 2008. Coping variation aerial survey protocol line-transect sampling. Wildlife Research 35:289-298.","code":""},{"path":"/reference/ptdata.distance.html","id":null,"dir":"Reference","previous_headings":"","what":"Single observer point count data example from Distance — ptdata.distance","title":"Single observer point count data example from Distance — ptdata.distance","text":"Single observer point count data example Distance","code":""},{"path":"/reference/ptdata.distance.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Single observer point count data example from Distance — ptdata.distance","text":"format 144 obs 6 variables: distance: numeric distance center observer: Factor w/ 2 levels \"1\",\"2\": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 object: sequential object number Sample.Label: point label Region.Label: single region label","code":""},{"path":"/reference/ptdata.distance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Single observer point count data example from Distance — ptdata.distance","text":"","code":"# \\donttest{ data(ptdata.distance) xx <- ddf(dsmodel = ~cds(key=\"hn\", formula = ~1), data = ptdata.distance, method = \"ds\", meta.data = list(point=TRUE)) #> Warning: no truncation distance specified; using largest observed distance summary(xx) #> #> Summary for ds object #> Number of observations : 144 #> Distance range : 0 - 34.16 #> AIC : 919.1403 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 2.283007 0.04523359 #> #> Estimate SE CV #> Average p 0.1644301 0.01466592 0.08919244 #> N in covered region 875.7520203 102.72037375 0.11729390 #> EDR 13.8518741 0.61774122 0.04459622 plot(xx,main=\"Distance point count data\") ddf.gof(xx) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> [0,2.85] (2.85,5.69] (5.69,8.54] (8.54,11.4] (11.4,14.2] (14.2,17.1] #> Observed 5.000 19.000 16.000 25.000 28.000 23.000 #> Expected 5.955 16.432 23.166 25.232 23.213 18.671 #> Chisquare 0.153 0.401 2.217 0.002 0.987 1.004 #> (17.1,19.9] (19.9,22.8] (22.8,25.6] (25.6,28.5] (28.5,31.3] #> Observed 14.000 5.000 5.000 3.000 0.000 #> Expected 13.356 8.578 4.978 2.620 1.254 #> Chisquare 0.031 1.493 0.000 0.055 1.254 #> (31.3,34.2] Total #> Observed 1.000 144.000 #> Expected 0.547 144.000 #> Chisquare 0.375 7.973 #> #> P = 0.6315 with 10 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.0954697 p-value = 0.607543 Regions <- data.frame(Region.Label=1,Area=1) Samples <- data.frame(Sample.Label=1:30, Region.Label=rep(1,30), Effort=rep(1,30)) print(dht(xx,sample.table=Samples,region.table=Regions)) #> Abundance and density estimates from distance sampling #> Variance : P2, N/L #> #> Summary statistics #> #> Region Area CoveredArea Effort n k ER se.ER cv.ER #> 1 1 1 109978.3 30 144 30 4.8 0.4245349 0.08844477 #> #> Abundance: #> Region Estimate se cv lcl ucl df #> 1 Total 0.007962956 0.001000224 0.1256096 0.006212055 0.01020736 97.52316 #> #> Density: #> Region Estimate se cv lcl ucl df #> 1 Total 0.007962956 0.001000224 0.1256096 0.006212055 0.01020736 97.52316 # }"},{"path":"/reference/ptdata.dual.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulated dual observer point count data — ptdata.dual","title":"Simulated dual observer point count data — ptdata.dual","text":"Simulated dual observer point count data detection p(0)=0.8; hn sigma=30; w=100 observers dependency y>0, gamma=0.1","code":""},{"path":"/reference/ptdata.dual.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Simulated dual observer point count data — ptdata.dual","text":"format 420 obs 6 variables: distance: numeric distance center observer: Factor w/ 2 levels \"1\",\"2\": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 person: Factor 2 levels ,B pair: Factor 2 levels \"AB\" BA\" $ object : sequential object number","code":""},{"path":"/reference/ptdata.dual.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulated dual observer point count data — ptdata.dual","text":"","code":"# \\donttest{ data(ptdata.dual) xx <- ddf(mrmodel=~glm(formula=~distance), dsmodel = ~cds(key=\"hn\", formula = ~1), data = ptdata.dual, method = \"io\", meta.data = list(point=TRUE)) #> Warning: no truncation distance specified; using largest observed distance summary(xx) #> #> Summary for io.fi object #> Number of observations : 210 #> Number seen by primary : 199 #> Number seen by secondary : 193 #> Number seen by both : 182 #> AIC : 192.4567 #> #> #> Conditional detection function parameters: #> estimate se #> (Intercept) 1.06437933 0.41946692 #> distance 0.04904523 0.01408653 #> #> Estimate SE CV #> Average primary p(0) 0.7435266 0.07999017 0.10758213 #> Average secondary p(0) 0.7435266 0.07999017 0.10758213 #> Average combined p(0) 0.9342214 0.04103071 0.04391969 #> #> #> Summary for ds object #> Number of observations : 210 #> Distance range : 0 - 96.32036 #> AIC : 1817.79 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 3.38454 0.03661838 #> #> Estimate SE CV #> Average p 0.1867483 0.01332166 0.07133485 #> EDR 41.6242555 1.48462997 0.03566742 #> #> #> Summary for io object #> Total AIC value : 2010.247 #> #> Estimate SE CV #> Average p 0.1744643 0.01461507 0.08377111 #> N in covered region 1203.6847617 125.94892721 0.10463614 plot(xx,main=\"Simulated point count data\") # }"},{"path":"/reference/ptdata.removal.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulated removal observer point count data — ptdata.removal","title":"Simulated removal observer point count data — ptdata.removal","text":"Simulated removal observer point count data detection p(0)=0.8; hn sigma=30; w=100 observers dependency y>0, gamma=0.1","code":""},{"path":"/reference/ptdata.removal.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Simulated removal observer point count data — ptdata.removal","text":"format 408 obs 6 variables: distance: numeric distance center observer: Factor w/ 2 levels \"1\",\"2\": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 person: Factor 2 levels ,B pair: Factor 2 levels \"AB\" BA\" object: sequential object number","code":""},{"path":"/reference/ptdata.removal.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulated removal observer point count data — ptdata.removal","text":"","code":"# \\donttest{ data(ptdata.removal) xx <- ddf(mrmodel=~glm(formula=~distance), dsmodel = ~cds(key=\"hn\", formula = ~1), data = ptdata.removal, method = \"rem\", meta.data = list(point=TRUE)) #> Warning: no truncation distance specified; using largest observed distance summary(xx) #> #> Summary for rem.fi object #> Number of observations : 204 #> Number seen by primary : 195 #> Number additional seen by secondary : 9 #> AIC : 69.33598 #> #> #> Conditional detection function parameters: #> estimate se #> (Intercept) 1.19813958 0.7821458 #> distance 0.07245812 0.0327875 #> #> Estimate SE CV #> Average primary p(0) 0.9462658 0.06457123 0.06823794 #> #> #> #> Summary for ds object #> Number of observations : 204 #> Distance range : 0 - 83.04828 #> AIC : 1744.474 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 3.366348 0.0383046 #> #> Estimate SE CV #> Average p 0.2394111 0.01708192 0.07134975 #> EDR 40.6352360 1.44965694 0.03567487 #> #> #> Summary for rem object #> #> Total AIC value = 1813.81 #> Estimate SE CV #> Average p 0.2265465 0.02236647 0.09872793 #> N in covered region 900.4772670 104.77563511 0.11635567 plot(xx,main=\"Simulated point count data\") # }"},{"path":"/reference/ptdata.single.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulated single observer point count data — ptdata.single","title":"Simulated single observer point count data — ptdata.single","text":"Simulated single observer point count data detection p(0)=1; hn sigma=30; w=100","code":""},{"path":"/reference/ptdata.single.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Simulated single observer point count data — ptdata.single","text":"format 341 obs 4 variables: ..$ distance: numeric distance center $ observer: Factor w/ 2 levels \"1\",\"2\": 1 2 1 2 1 2 1 2 1 2 ... ..$ detected: numeric 0/1 $ object : sequential object number","code":""},{"path":"/reference/ptdata.single.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Simulated single observer point count data — ptdata.single","text":"","code":"# \\donttest{ data(ptdata.single) xx=ddf(dsmodel = ~cds(key=\"hn\", formula = ~1), data = ptdata.single, method = \"ds\", meta.data = list(point=TRUE)) #> Warning: no truncation distance specified; using largest observed distance summary(xx) #> #> Summary for ds object #> Number of observations : 341 #> Distance range : 0 - 95.62823 #> AIC : 2928.884 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 3.397033 0.02984984 #> #> Estimate SE CV #> Average p 0.1940384 0.0112283 0.05786639 #> N in covered region 1757.3842381 132.8196911 0.07557806 #> EDR 42.1240314 1.2187829 0.02893320 plot(xx,main=\"Simulated point count data\") # }"},{"path":"/reference/qqplot.ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"Constructs quantile-quantile (Q-Q) plot fitted model graphical check goodness fit. Formal goodness fit testing detection function models using Kolmogorov-Smirnov Cramer-von Mises tests. tests based looking quantile-quantile plot produced qqplot.ddf deviations line x=y.","code":""},{"path":"/reference/qqplot.ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"","code":"qqplot.ddf(model, plot = TRUE, nboot = 100, ks = FALSE, ...)"},{"path":"/reference/qqplot.ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"model fitted distance detection function model object plot Q-Q plot plotted just report statistics? nboot number replicates use calculate p-values goodness fit test statistics ks perform Kolmogorov-Smirnov test (involves many bootstraps can take ) ... additional arguments passed plot","code":""},{"path":"/reference/qqplot.ddf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"list goodness fit related values: edf matrix lower upper empirical distribution function values cdf fitted cumulative distribution function values ks list K-S statistic (Dn) p-value (p) CvM list CvM statistic (W) p-value (p)","code":""},{"path":"/reference/qqplot.ddf.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"Kolmogorov-Smirnov test asks question \"largest vertical distance point y=x line?\" uses distance statistic test null hypothesis samples (EDF CDF case) distribution (hence model fits well). deviation y=x line points large reject null hypothesis say model good fit. Rather looking single biggest difference y=x line points Q-Q plot, might prefer think differences line points, since may many smaller differences want take account rather looking one large deviation. null hypothesis , statistic uses sum deviations point line.","code":""},{"path":"/reference/qqplot.ddf.html","id":"details-1","dir":"Reference","previous_headings":"","what":"Details","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"Note bootstrap procedure required ensure p-values procedure correct comparing cumulative distribution function (CDF) empirical distribution function (EDF) estimated parameters detection function.","code":""},{"path":"/reference/qqplot.ddf.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.. Marques, J.R.B. Bishop, L. Thomas. 2004. topics distance sampling. pp: 385-389. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":[]},{"path":"/reference/qqplot.ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Quantile-quantile plot and goodness of fit tests for detection functions — qqplot.ddf","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/rem.glm.html","id":null,"dir":"Reference","previous_headings":"","what":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"Detection function fitting mark-recapture data removal configuration secondary observer knows primary observer detects detects objects missed primary observer. iterative offset glm/gam uses offset compensate conditioning set objects seen either observer (eg 00 missed observers included analysis. function similar io.glm.","code":""},{"path":"/reference/rem.glm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"","code":"rem.glm( datavec, fitformula, eps = 1e-05, iterlimit = 500, GAM = FALSE, gamplot = TRUE, datavec2 )"},{"path":"/reference/rem.glm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"datavec dataframe containing records seen either observer 1 2 fitformula logit link formula eps convergence criterion iterlimit maximum number iterations allowed GAM uses GAM instead GLM fitting gamplot set TRUE get gam plot object GAM=TRUE datavec2 dataframe containing records observer 1 observer 2 io.glm form; used case observer(platform effect)","code":""},{"path":"/reference/rem.glm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"list class(\"remglm\",\"glm\",\"lm\") class(\"remglm\",\"gam\") glmobj GLM GAM object offsetvalue offsetvalues iterative fit plotobj gam plot object (GAM & gamplot==TRUE, else NULL)","code":""},{"path":"/reference/rem.glm.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"difference function io.glm offset data construction one detection function estimated primary observer. two functions merged.","code":""},{"path":"/reference/rem.glm.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"currently code function GAMs commented remainder mrds package work GAMs.","code":""},{"path":"/reference/rem.glm.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"Buckland, S.T., J.M. breiwick, K.L. Cattanach, J.L. Laake. 1993. Estimated population size California gray whale. Marine Mammal Science, 9:235-249. Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.. Marques, J.R.B. Bishop, L. Thomas. 2004. topics distance sampling. pp: 360-363. : Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, L. Thomas. Oxford University Press.","code":""},{"path":"/reference/rem.glm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Iterative offset model fitting of mark-recapture with removal model — rem.glm","text":"Jeff Laake","code":""},{"path":"/reference/rescale_pars.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","title":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","text":"calculate rescaling needed covariates included scale detection function \"big\". Based code optimx.","code":""},{"path":"/reference/rescale_pars.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","text":"","code":"rescale_pars(initialvalues, ddfobj)"},{"path":"/reference/rescale_pars.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","text":"initialvalues starting values optimisation ddfobj detection function object","code":""},{"path":"/reference/rescale_pars.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","text":"Derivative-free methods like nlminb sensitive parameters poorly scaled. can also cause problems quasi-Newton methods (least, bad scaling _help_ optimisation). rescale parameters necessary (unless already got scaling control)","code":""},{"path":"/reference/rescale_pars.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the parameter rescaling for parameters associated with covariates — rescale_pars","text":"David L Miller","code":""},{"path":"/reference/sample_ddf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate data from a fitted detection function and refit the model — sample_ddf","title":"Generate data from a fitted detection function and refit the model — sample_ddf","text":"Generate data fitted detection function refit model","code":""},{"path":"/reference/sample_ddf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate data from a fitted detection function and refit the model — sample_ddf","text":"","code":"sample_ddf(ds.object)"},{"path":"/reference/sample_ddf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate data from a fitted detection function and refit the model — sample_ddf","text":"ds.object fitted detection function object","code":""},{"path":"/reference/sample_ddf.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Generate data from a fitted detection function and refit the model — sample_ddf","text":"function changes random number generator seed. avoid potential side-effects, use something like: seed <- get(\".Random.seed\",envir=.GlobalEnv) running code assign(\".Random.seed\",seed,envir=.GlobalEnv) .","code":""},{"path":"/reference/sample_ddf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate data from a fitted detection function and refit the model — sample_ddf","text":"David L. Miller","code":""},{"path":"/reference/setbounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set parameter bounds — setbounds","title":"Set parameter bounds — setbounds","text":"Set values lower upper bounds check lengths user-specified values","code":""},{"path":"/reference/setbounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set parameter bounds — setbounds","text":"","code":"setbounds(lowerbounds, upperbounds, initialvalues, ddfobj, width, left)"},{"path":"/reference/setbounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set parameter bounds — setbounds","text":"lowerbounds vector lower bounds upperbounds vector upper bounds initialvalues vector initial parameter estimates ddfobj distance detection function object width truncation distance left left truncation distance","code":""},{"path":"/reference/setbounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set parameter bounds — setbounds","text":"lower vector lower bounds upper vector upper bounds setlower logical indicating whether user set lower bounds setupper logical indicating whether user set upper bounds","code":""},{"path":"/reference/setbounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set parameter bounds — setbounds","text":"Jeff Laake","code":""},{"path":"/reference/setcov.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates design matrix for covariates in detection function — setcov","title":"Creates design matrix for covariates in detection function — setcov","text":"function creates design matrix g(0) scale covariates using input model formula. returns list contains 2 elements: 1) dim: dimension (number columns) design matrix, 2) cov: constructed design matrix. function relatively simple uses built-function model.matrix majority work. function handles 2 exceptions \"~.\", null model 0 columns \"~1\" intercept model - column 1s. model 2 exceptions provided, calls model.matrix construct columns. columns design matrix 0's column removed. occurs data particular factor.","code":""},{"path":"/reference/setcov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates design matrix for covariates in detection function — setcov","text":"","code":"setcov(dmat, model)"},{"path":"/reference/setcov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates design matrix for covariates in detection function — setcov","text":"dmat data matrix model model formula","code":""},{"path":"/reference/setcov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates design matrix for covariates in detection function — setcov","text":"design matrix specified data model","code":""},{"path":"/reference/setcov.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates design matrix for covariates in detection function — setcov","text":"Jeff Laake","code":""},{"path":"/reference/setinitial.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set initial values for detection function based on distance sampling — setinitial.ds","title":"Set initial values for detection function based on distance sampling — setinitial.ds","text":"given detection function, computes initial values parameters including scale shape parameters adjustment function parameters . user-defined initial values parameters specified user computed.","code":""},{"path":"/reference/setinitial.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set initial values for detection function based on distance sampling — setinitial.ds","text":"","code":"setinitial.ds(ddfobj, width, initial, point, left) sethazard(ddfobj, dmat, width, left, point)"},{"path":"/reference/setinitial.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set initial values for detection function based on distance sampling — setinitial.ds","text":"ddfobj distance detection function object width half-width transect radius point count initial list user-defined initial values possible elements: scale, shape, adjustment point TRUE, point count data; otherwise, line transect data left left truncation dmat xmat ddfobj","code":""},{"path":"/reference/setinitial.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set initial values for detection function based on distance sampling — setinitial.ds","text":"scale vector initial scale parameter values shape vector initial shape parameter values adjustment vector initial adjustment function parameter values","code":""},{"path":"/reference/setinitial.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set initial values for detection function based on distance sampling — setinitial.ds","text":"Jeff Laake, David L Miller","code":""},{"path":"/reference/sim.mix.html","id":null,"dir":"Reference","previous_headings":"","what":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"Simulation distance sampling data via mixture models Allows one simulate line transect distance sampling data using mixture half-normal detection functions.","code":""},{"path":"/reference/sim.mix.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"","code":"sim.mix(n, sigma, mix.prop, width, means = 0)"},{"path":"/reference/sim.mix.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"n number samples generate sigma vector scale parameters mix.prop vector mixture proportions (length sigma) width truncation means vector means (used generate wacky, non-monotonic data)","code":""},{"path":"/reference/sim.mix.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"distances vector distances","code":""},{"path":"/reference/sim.mix.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"moment TOTALLY UNSUPPORTED! Please use anything important!","code":""},{"path":"/reference/sim.mix.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions. — sim.mix","text":"David Lawrence Miller","code":""},{"path":"/reference/solvecov.html","id":null,"dir":"Reference","previous_headings":"","what":"Invert of covariance matrices — solvecov","title":"Invert of covariance matrices — solvecov","text":"Tries invert matrix solve. fails singularity, eigenvector decomposition computed, eigenvalues 1/cmax replaced 1/cmax, .e., cmax corresponding eigenvalue inverted matrix.","code":""},{"path":"/reference/solvecov.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Invert of covariance matrices — solvecov","text":"","code":"solvecov(m, cmax = 1e+10)"},{"path":"/reference/solvecov.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Invert of covariance matrices — solvecov","text":"m numeric symmetric matrix. cmax positive value, see .","code":""},{"path":"/reference/solvecov.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Invert of covariance matrices — solvecov","text":"list following components: inv inverted matrix, coll TRUE solve failed singularity.","code":""},{"path":"/reference/solvecov.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Invert of covariance matrices — solvecov","text":"solvecov code taken package fpc: Christian Hennig","code":""},{"path":[]},{"path":"/reference/solvecov.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Invert of covariance matrices — solvecov","text":"Christian Hennig","code":""},{"path":"/reference/stake77.html","id":null,"dir":"Reference","previous_headings":"","what":"Wooden stake data from 1977 survey — stake77","title":"Wooden stake data from 1977 survey — stake77","text":"Multiple surveys different observers single 1km transect containing 150 wooden stakes placed randomly throughout 40 m strip (20m either side).","code":""},{"path":"/reference/stake77.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Wooden stake data from 1977 survey — stake77","text":"data frame 150 observations following 10 variables. StakeNo unique number stake 1-150 PD perpendicular distance stake placed line Obs1 0/1 whether missed/seen observer 1 Obs2 0/1 whether missed/seen observer 2 Obs3 0/1 whether missed/seen observer 3 Obs4 0/1 whether missed/seen observer 4 Obs5 0/1 whether missed/seen observer 5 Obs6 0/1 whether missed/seen observer 6 Obs7 0/1 whether missed/seen observer 7 Obs8 0/1 whether missed/seen observer 8","code":""},{"path":"/reference/stake77.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Wooden stake data from 1977 survey — stake77","text":"Laake, J. 1978. Line transect estimators robust animal movement. M.S. Thesis. Utah State University, Logan, Utah. 55p.","code":""},{"path":"/reference/stake77.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Wooden stake data from 1977 survey — stake77","text":"Burnham, K. P., D. R. Anderson, J. L. Laake. 1980. Estimation Density Line Transect Sampling Biological Populations. Wildlife Monographs:7-202.","code":""},{"path":"/reference/stake77.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Wooden stake data from 1977 survey — stake77","text":"","code":"# \\donttest{ data(stake77) # Extract functions for stake data and put in the mrds format extract.stake <- function(stake,obs){ extract.obs <- function(obs){ example <- subset(stake,eval(parse(text=paste(\"Obs\",obs,\"==1\",sep=\"\"))), select=\"PD\") example$distance <- example$PD example$object <- 1:nrow(example) example$PD <- NULL return(example) } if(obs!=\"all\"){ return(extract.obs(obs=obs)) }else{ example <- NULL for(i in 1:(ncol(stake)-2)){ df <- extract.obs(obs=i) df$person <- i example <- rbind(example,df) } example$person <- factor(example$person) example$object <- 1:nrow(example) return(example) } } extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){ obs1 <- paste(\"Obs\",obs1,sep=\"\") obs2 <- paste(\"Obs\",obs2,sep=\"\") example <- subset(stake,eval(parse(text=paste(obs1,\"==1 |\",obs2,\"==1 \", sep=\"\"))),select=c(\"PD\",obs1,obs2)) names(example) <- c(\"distance\",\"obs1\",\"obs2\") detected <- c(example$obs1,example$obs2) example <- data.frame(object = rep(1:nrow(example),2), distance = rep(example$distance,2), detected = detected, observer = c(rep(1,nrow(example)), rep(2,nrow(example)))) if(removal) example$detected[example$observer==2] <- 1 return(example) } # extract data for observer 1 and fit a single observer model stakes <- extract.stake(stake77,1) ds.model <- ddf(dsmodel = ~mcds(key = \"hn\", formula = ~1), data = stakes, method = \"ds\", meta.data = list(width = 20)) plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE) ddf.gof(ds.model) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> [0,2.22] (2.22,4.44] (4.44,6.67] (6.67,8.89] (8.89,11.1] (11.1,13.3] #> Observed 13.000 17.000 14.000 12.000 11.000 5.000 #> Expected 16.023 15.107 13.430 11.256 8.894 6.627 #> Chisquare 0.570 0.237 0.024 0.049 0.498 0.399 #> (13.3,15.6] (15.6,17.8] (17.8,20] Total #> Observed 3.000 3.000 3.000 81.00 #> Expected 4.655 3.083 1.925 81.00 #> Chisquare 0.588 0.002 0.600 2.97 #> #> P = 0.8878 with 7 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.051489 p-value = 0.867184 # extract data from observers 1 and 3 and fit an io model stkpairs <- extract.stake.pairs(stake77,1,3,removal=FALSE) io.model <- ddf(dsmodel = ~mcds(key = \"hn\", formula=~1), mrmodel=~glm(formula=~distance), data = stkpairs, method = \"io\") #> Warning: no truncation distance specified; using largest observed distance summary(io.model) #> #> Summary for io.fi object #> Number of observations : 89 #> Number seen by primary : 81 #> Number seen by secondary : 68 #> Number seen by both : 60 #> AIC : 137.046 #> #> #> Conditional detection function parameters: #> estimate se #> (Intercept) 3.105418 0.52079895 #> distance -0.228405 0.05957038 #> #> Estimate SE CV #> Average primary p(0) 0.9571157 0.021376325 0.022334108 #> Average secondary p(0) 0.9571157 0.021376325 0.022334108 #> Average combined p(0) 0.9981609 0.001833418 0.001836796 #> #> #> Summary for ds object #> Number of observations : 89 #> Distance range : 0 - 19.39 #> AIC : 504.1853 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 2.233369 0.1031155 #> #> Estimate SE CV #> Average p 0.5803993 0.04794403 0.08260525 #> #> #> Summary for io object #> Total AIC value : 641.2313 #> #> Estimate SE CV #> Average p 0.5793319 0.04786769 0.08262567 #> N in covered region 153.6252334 16.51282572 0.10748772 par(mfrow=c(3,2)) plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE) dev.new() ddf.gof(io.model) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> #> Distance sampling component: #> [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5] #> Observed 17.000 21.000 16.000 14.000 9.000 4.000 #> Expected 18.954 17.725 15.499 12.673 9.690 6.929 #> Chisquare 0.202 0.605 0.016 0.139 0.049 1.238 #> (14.5,17] (17,19.4] Total #> Observed 4.000 4.000 89.000 #> Expected 4.633 2.897 89.000 #> Chisquare 0.086 0.420 2.756 #> #> P = 0.8388 with 6 degrees of freedom #> #> Mark-recapture component: #> Capture History 10 #> [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5] #> Observed 2 0 1 3 6 3 #> Expected 1 2 2 3 2 1 #> Chisquare 1 2 1 0 6 2 #> (14.5,17] (17,19.4] Total #> Observed 4 2 21 #> Expected 2 2 14 #> Chisquare 4 0 16 #> Capture History 01 #> [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5] #> Observed 3 1 2 1 0 0 #> Expected 1 2 2 3 2 1 #> Chisquare 5 0 0 1 2 1 #> (14.5,17] (17,19.4] Total #> Observed 0 1 8 #> Expected 2 2 14 #> Chisquare 2 0 12 #> Capture History 11 #> [0,2.42] (2.42,4.85] (4.85,7.27] (7.27,9.7] (9.7,12.1] (12.1,14.5] #> Observed 12 20 13 10 3 1 #> Expected 15 17 12 9 4 1 #> Chisquare 1 0 0 0 0 0 #> (14.5,17] (17,19.4] Total #> Observed 0 1 60 #> Expected 1 1 60 #> Chisquare 1 0 3 #> #> MR total chi-square = 31.176 P = 0.0052374 with 14 degrees of freedom #> #> #> Total chi-square = 33.932 P = 0.026589 with 20 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.0468697 p-value = 0.895003 # }"},{"path":"/reference/stake78.html","id":null,"dir":"Reference","previous_headings":"","what":"Wooden stake data from 1978 survey — stake78","title":"Wooden stake data from 1978 survey — stake78","text":"Multiple surveys different observers single 1km transect containing 150 wooden stakes placed based expected uniform distribution throughout 40 m strip (20m either side).","code":""},{"path":"/reference/stake78.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Wooden stake data from 1978 survey — stake78","text":"data frame 150 observations following 13 variables. StakeNo unique number stake 1-150 PD perpendicular distance stake placed line Obs1 0/1 whether missed/seen observer 1 Obs2 0/1 whether missed/seen observer 2 Obs3 0/1 whether missed/seen observer 3 Obs4 0/1 whether missed/seen observer 4 Obs5 0/1 whether missed/seen observer 5 Obs6 0/1 whether missed/seen observer 6 Obs7 0/1 whether missed/seen observer 7 Obs8 0/1 whether missed/seen observer 8 Obs9 0/1 whether missed/seen observer 9 Obs10 0/1 whether missed/seen observer 10 Obs11 0/1 whether missed/seen observer 11","code":""},{"path":"/reference/stake78.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Wooden stake data from 1978 survey — stake78","text":"Laake, J. 1978. Line transect estimators robust animal movement. M.S. Thesis. Utah State University, Logan, Utah. 55p.","code":""},{"path":"/reference/stake78.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Wooden stake data from 1978 survey — stake78","text":"1997 survey based single realization uniform distribution. single transect randomization distances survey, repeated experiment used distances provided uniform distribution randomly sorted positions along line pattern obvious observer.","code":""},{"path":"/reference/stake78.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Wooden stake data from 1978 survey — stake78","text":"Burnham, K. P., D. R. Anderson, J. L. Laake. 1980. Estimation Density Line Transect Sampling Biological Populations. Wildlife Monographs:7-202.","code":""},{"path":"/reference/stake78.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Wooden stake data from 1978 survey — stake78","text":"","code":"# \\donttest{ data(stake78) data(stake77) # compare distribution of distances for all stakes hist(stake77$PD) hist(stake78$PD) # Extract stake data and put in the mrds format for model fitting. extract.stake <- function(stake,obs){ extract.obs <- function(obs){ example <- subset(stake,eval(parse(text=paste(\"Obs\",obs,\"==1\",sep=\"\"))), select=\"PD\") example$distance <- example$PD example$object <- 1:nrow(example) example$PD <- NULL return(example) } if(obs!=\"all\"){ return(extract.obs(obs=obs)) }else{ example <- NULL for(i in 1:(ncol(stake)-2)){ df <- extract.obs(obs=i) df$person <- i example <- rbind(example,df) } example$person <- factor(example$person) example$object <- 1:nrow(example) return(example) } } extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){ obs1 <- paste(\"Obs\",obs1,sep=\"\") obs2 <- paste(\"Obs\",obs2,sep=\"\") example <- subset(stake,eval(parse(text=paste(obs1,\"==1 |\",obs2,\"==1 \", sep=\"\"))), select=c(\"PD\",obs1,obs2)) names(example) <- c(\"distance\",\"obs1\",\"obs2\") detected <- c(example$obs1,example$obs2) example <- data.frame(object=rep(1:nrow(example),2), distance=rep(example$distance,2), detected = detected, observer=c(rep(1,nrow(example)), rep(2,nrow(example)))) if(removal) example$detected[example$observer==2] <- 1 return(example) } # extract data for observer 10 and fit a single observer model stakes <- extract.stake(stake78,10) ds.model <- ddf(dsmodel = ~mcds(key = \"hn\", formula = ~1), data = stakes, method = \"ds\", meta.data = list(width = 20)) plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE) ddf.gof(ds.model) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> [0,3.33] (3.33,6.67] (6.67,10] (10,13.3] (13.3,16.7] (16.7,20] Total #> Observed 20.000 8.000 4.000 3.000 4.000 1.000 40.000 #> Expected 13.254 11.113 7.812 4.604 2.275 0.942 40.000 #> Chisquare 3.433 0.872 1.860 0.559 1.308 0.004 8.036 #> #> P = 0.090283 with 4 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.342811 p-value = 0.10286 # extract data from observers 5 and 7 and fit an io model stkpairs <- extract.stake.pairs(stake78,5,7,removal=FALSE) io.model <- ddf(dsmodel = ~mcds(key = \"hn\", formula=~1), mrmodel=~glm(formula=~distance), data = stkpairs, method = \"io\") #> Warning: no truncation distance specified; using largest observed distance summary(io.model) #> #> Summary for io.fi object #> Number of observations : 68 #> Number seen by primary : 60 #> Number seen by secondary : 55 #> Number seen by both : 47 #> AIC : 116.2709 #> #> #> Conditional detection function parameters: #> estimate se #> (Intercept) 1.81859268 0.43467528 #> distance -0.04485342 0.04688151 #> #> Estimate SE CV #> Average primary p(0) 0.8603972 0.05221053 0.06068190 #> Average secondary p(0) 0.8603972 0.05221053 0.06068190 #> Average combined p(0) 0.9805111 0.01457748 0.01486722 #> #> #> Summary for ds object #> Number of observations : 68 #> Distance range : 0 - 19.34 #> AIC : 391.1836 #> Optimisation : mrds (nlminb) #> #> Detection function: #> Half-normal key function #> #> Detection function parameters #> Scale coefficient(s): #> estimate se #> (Intercept) 2.340436 0.1284981 #> #> Estimate SE CV #> Average p 0.6309225 0.05837871 0.09252913 #> #> #> Summary for io object #> Total AIC value : 507.4545 #> #> Estimate SE CV #> Average p 0.6186265 0.05797515 0.09371592 #> N in covered region 109.9209291 13.18643833 0.11996294 par(mfrow=c(3,2)) plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE) ddf.gof(io.model) #> #> Goodness of fit results for ddf object #> #> Chi-square tests #> #> Distance sampling component: #> [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6] #> Observed 19.000 16.000 12.000 5.000 4.000 7.000 #> Expected 15.217 14.183 12.322 9.977 7.530 5.297 #> Chisquare 0.940 0.233 0.008 2.483 1.655 0.548 #> (16.6,19.3] Total #> Observed 5.000 68.000 #> Expected 3.473 68.000 #> Chisquare 0.671 6.538 #> #> P = 0.25731 with 5 degrees of freedom #> #> Mark-recapture component: #> Capture History 10 #> [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6] #> Observed 1 4 2 3 1 2 #> Expected 2 2 2 1 1 1 #> Chisquare 1 1 0 6 0 0 #> (16.6,19.3] Total #> Observed 0 13 #> Expected 1 10 #> Chisquare 1 9 #> Capture History 01 #> [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6] #> Observed 4 0 2 0 0 0 #> Expected 2 2 2 1 1 1 #> Chisquare 1 2 0 1 1 1 #> (16.6,19.3] Total #> Observed 2 8 #> Expected 1 10 #> Chisquare 1 7 #> Capture History 11 #> [0,2.76] (2.76,5.53] (5.53,8.29] (8.29,11.1] (11.1,13.8] (13.8,16.6] #> Observed 14 12 8 2 3 5 #> Expected 14 12 8 3 3 4 #> Chisquare 0 0 0 1 0 0 #> (16.6,19.3] Total #> Observed 3 47 #> Expected 3 47 #> Chisquare 0 1 #> #> MR total chi-square = 17.108 P = 0.1456 with 12 degrees of freedom #> #> #> Total chi-square = 23.646 P = 0.12938 with 17 degrees of freedom #> #> Distance sampling Cramer-von Mises test (unweighted) #> Test statistic = 0.246294 p-value = 0.19319 # }"},{"path":"/reference/summary.ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.ds","title":"Summary of distance detection function model object — summary.ds","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.ds","text":"","code":"# S3 method for class 'ds' summary(object, se = TRUE, N = TRUE, ...)"},{"path":"/reference/summary.ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.ds","text":"object ddf model object se TRUE, computes standard errors N TRUE, computes abundance covered (sampled) region ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.ds","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.ds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.ds","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.ds.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.ds","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.ds","text":"Jeff Laake","code":""},{"path":"/reference/summary.io.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.io.fi","title":"Summary of distance detection function model object — summary.io.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.io.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.io.fi","text":"","code":"# S3 method for class 'io.fi' summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ddfobj = NULL, ...)"},{"path":"/reference/summary.io.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.io.fi","text":"object ddf model object se TRUE, computes standard errors N TRUE, computes abundance covered (sampled) region fittedmodel full fitted model called trial io ddfobj distance sampling object description ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.io.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.io.fi","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.io.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.io.fi","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.io.fi.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.io.fi","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.io.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.io.fi","text":"Jeff Laake","code":""},{"path":"/reference/summary.io.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.io","title":"Summary of distance detection function model object — summary.io","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.io.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.io","text":"","code":"# S3 method for class 'io' summary(object, se = TRUE, ...)"},{"path":"/reference/summary.io.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.io","text":"object ddf model object se TRUE, computes standard errors ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.io.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.io","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.io.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.io","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.io.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.io","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.io.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.io","text":"Jeff Laake","code":""},{"path":"/reference/summary.rem.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.rem.fi","title":"Summary of distance detection function model object — summary.rem.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.rem.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.rem.fi","text":"","code":"# S3 method for class 'rem.fi' summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)"},{"path":"/reference/summary.rem.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.rem.fi","text":"object ddf model object se TRUE, computes standard errors N TRUE, computes abundance covered (sampled) region fittedmodel full fitted model called trial io ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.rem.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.rem.fi","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.rem.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.rem.fi","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.rem.fi.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.rem.fi","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.rem.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.rem.fi","text":"Jeff Laake","code":""},{"path":"/reference/summary.rem.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.rem","title":"Summary of distance detection function model object — summary.rem","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.rem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.rem","text":"","code":"# S3 method for class 'rem' summary(object, se = TRUE, ...)"},{"path":"/reference/summary.rem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.rem","text":"object ddf model object se TRUE, computes standard errors ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.rem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.rem","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.rem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.rem","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.rem.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.rem","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.rem.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.rem","text":"Jeff Laake","code":""},{"path":"/reference/summary.trial.fi.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.trial.fi","title":"Summary of distance detection function model object — summary.trial.fi","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.trial.fi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.trial.fi","text":"","code":"# S3 method for class 'trial.fi' summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)"},{"path":"/reference/summary.trial.fi.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.trial.fi","text":"object ddf model object se TRUE, computes standard errors N TRUE, computes abundance covered (sampled) region fittedmodel full fitted model called trial io ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.trial.fi.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.trial.fi","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.trial.fi.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.trial.fi","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.trial.fi.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.trial.fi","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.trial.fi.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.trial.fi","text":"Jeff Laake","code":""},{"path":"/reference/summary.trial.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary of distance detection function model object — summary.trial","title":"Summary of distance detection function model object — summary.trial","text":"Provides brief summary data fitted detection probability model parameters, model selection criterion, optionally abundance covered (sampled) region standard error.","code":""},{"path":"/reference/summary.trial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary of distance detection function model object — summary.trial","text":"","code":"# S3 method for class 'trial' summary(object, se = TRUE, ...)"},{"path":"/reference/summary.trial.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary of distance detection function model object — summary.trial","text":"object ddf model object se TRUE, computes standard errors ... unspecified unused arguments S3 consistency","code":""},{"path":"/reference/summary.trial.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary of distance detection function model object — summary.trial","text":"list extracted summarized objects","code":""},{"path":"/reference/summary.trial.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Summary of distance detection function model object — summary.trial","text":"argument N used suppress computation abundance average detection probability calls summarize ds either io.fi trial.fi summaries io trial objects respectively composed ds model object mark-recapture model object. corresponding print function called print summary results.","code":""},{"path":"/reference/summary.trial.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Summary of distance detection function model object — summary.trial","text":"function called generic function summary ddf model object. function can called directly user, typically safest use generic function summary calls appropriate function based type ddf model.","code":""},{"path":"/reference/summary.trial.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary of distance detection function model object — summary.trial","text":"Jeff Laake","code":""},{"path":"/reference/survey.region.dht.html","id":null,"dir":"Reference","previous_headings":"","what":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"Extrapolate Horvitz-Thompson abundance estimates entire surveyed region","code":""},{"path":"/reference/survey.region.dht.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"","code":"survey.region.dht(Nhat.by.sample, samples, width, left, point, areas.supplied)"},{"path":"/reference/survey.region.dht.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"Nhat..sample dataframe abundance sample samples samples table width truncation width left left truncation point TRUE point count otherwise line transect areas.supplied TRUE, covered area extracted CoveredArea column Nhat..sample","code":""},{"path":"/reference/survey.region.dht.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"Revised Nhat..sample dataframe containing estimates extrapolated survey region","code":""},{"path":"/reference/survey.region.dht.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"Internal function called dht related functions.","code":""},{"path":"/reference/survey.region.dht.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region — survey.region.dht","text":"Jeff Laake David L Miller","code":""},{"path":"/reference/test.breaks.html","id":null,"dir":"Reference","previous_headings":"","what":"Test validity for histogram breaks(cutpoints) — test.breaks","title":"Test validity for histogram breaks(cutpoints) — test.breaks","text":"Determines whether user specified breaks histograms properly ordered match left right truncation.","code":""},{"path":"/reference/test.breaks.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test validity for histogram breaks(cutpoints) — test.breaks","text":"","code":"test.breaks(breaks, left, width)"},{"path":"/reference/test.breaks.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test validity for histogram breaks(cutpoints) — test.breaks","text":"breaks vector cutpoints (breaks) distance histogram left left truncation value width right truncation value; either radius point count half-width transect","code":""},{"path":"/reference/test.breaks.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Test validity for histogram breaks(cutpoints) — test.breaks","text":"vector breaks modified valid necessary","code":""},{"path":"/reference/test.breaks.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Test validity for histogram breaks(cutpoints) — test.breaks","text":"Jeff Laake","code":""},{"path":"/reference/varn.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute empirical variance of encounter rate — varn","title":"Compute empirical variance of encounter rate — varn","text":"Computes one series possible variance estimates observed encounter rate set sample measurements (e.g., line lengths) number observations per sample.","code":""},{"path":"/reference/varn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute empirical variance of encounter rate — varn","text":"","code":"varn(lvec,nvec,type) covn(lvec, groups1, groups2, type)"},{"path":"/reference/varn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute empirical variance of encounter rate — varn","text":"lvec vector sample measurements (e.g., line lengths) nvec vector number observed type choice variance estimator use encounter rate groups1 vector number groups observed groups2 vector number individuals observed","code":""},{"path":"/reference/varn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute empirical variance of encounter rate — varn","text":"Variance encounter rate defined arguments","code":""},{"path":"/reference/varn.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Compute empirical variance of encounter rate — varn","text":"choice type follows notation Fewster et al. (2009) 8 choices encounter rate variance can computed lines one points: R2 random line placement unequal line lengths (design-assisted estimator) R3 random line placement, model-assisted estimator, based true contagion process R4 random line placement, model-assisted estimator, based apparent contagion process S1 systematic line placement, post-stratification strata overlap S2 systematic line placement, post-stratification strata overlap, variances weighted line length per stratum O1 systematic line placement, post-stratification overlapping strata (akin S1) O2 systematic line placement, post-stratification overlapping strata (weighted line length per stratum, akin S2) O3 systematic line placement, post-stratification overlapping strata, model-assisted estimator trend encounter rate line length P2 random point placement, potentially unequal number visits per point, design-based estimator P3 random point placement, potentially unequal number visits per point, model-based estimator Default value \"R2\", shown Fewster et al. (2009) good performance completely random designs lines. systematic parallel line transect designs, Fewster et al. recommend \"O2\". point transects default \"P2\" (\"P3\" also available). systematic estimators, pairs assigned order given lengths groups vectors.","code":""},{"path":"/reference/varn.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Compute empirical variance of encounter rate — varn","text":"function also used different calling arguments compute Innes et al variance estimated abundances/length rather observation encounter rate. function covn probably valid R3 R2. Currently, R2 form used types R3.","code":""},{"path":"/reference/varn.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Compute empirical variance of encounter rate — varn","text":"Fewster, R.M., S.T. Buckland, K.P. Burnham, D.L. Borchers, P.E. Jupp, J.L. Laake L. Thomas. 2009. Estimating encounter rate variance distance sampling. Biometrics 65: 225-236.","code":""},{"path":"/reference/varn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute empirical variance of encounter rate — varn","text":"Jeff Laake, David L Miller","code":""},{"path":"/news/index.html","id":"mrds-300","dir":"Changelog","previous_headings":"","what":"mrds 3.0.0","title":"mrds 3.0.0","text":"CRAN release: 2024-10-23 New features default R optimiser (strict) monotonicity detection function enforced improved. Monotonicity enforced detection function adjustment terms include covariates. new optimiser Sequential Least Squares Programming (SLSQP) algorithm included ‘nloptr’-package. optimiser uses analytical gradients rather approximate gradients therefore robust improved runtime. Users can still make ddf() use previous default R optimiser specifying mono.method = ‘solnp’ ‘control’ argument. default mono.method ‘slsqp’. small improvements bug fixes monotonic optimiser, results ddf() might change even using old solnp optimiser. cases, however, expect significant changes estimates. Bug Fixes summary fitting object now correctly prints optimiser used monotonicity enforced (‘slsqp’ ‘solnp’). check.mono() now uses point locations optimiser. also uses tolerance optimiser (1e-8) applies tolerance checking (strict) monotonicity, checking 0 <= g(x) <= 1.","code":""},{"path":"/news/index.html","id":"mrds-230","dir":"Changelog","previous_headings":"","what":"mrds 2.3.0","title":"mrds 2.3.0","text":"CRAN release: 2023-12-18 New Features ‘P2’ estimator now default estimating encounter rate variance point transect surveys. (Issue #65) Bug Fixes Re-formatted format section documentation book.tee.data (Issue #91) Ensure MCDS optimizer used double observer models generating errors. (Issue #89) Improved documentation initial values, lower upper bounds ddf mrds_opt documentation (mrds_opt renamed mrds-opt accessible via ?mrds-opt). (Issue #90)","code":""},{"path":"/news/index.html","id":"mrds-229","dir":"Changelog","previous_headings":"","what":"mrds 2.2.9","title":"mrds 2.2.9","text":"CRAN release: 2023-07-06 New Features Users can now download fortran MCDS.exe optimiser used Distance Windows fit single observer models optimisers R via # mrds also MCDS.exe. datasets optimisation MCDS.exe superior (giving better likelihood) optimiser R used mrds. See ?MCDS details. Bug Fixes fix bug (true, 2nd derivative) hessian calculated optimisation. lead weird errors later (summary doesn’t work etc). Hessians now calculated case. Thanks Anne Provencher St-Pierre reporting issue Fix prediction bug (Issue #84) predicting hazard rate model covariates se.fit= TRUE. Note may issues predicting instance binned data - check results expected. Fix bug uniform model fitted adjustments. caused error looking hessian. also required covariance set 0 estimating cluster size standard errors (Issue #79). fix bug using binned data via cutpoints prediction (#73)","code":""},{"path":"/news/index.html","id":"mrds-228","dir":"Changelog","previous_headings":"","what":"mrds 2.2.8","title":"mrds 2.2.8","text":"CRAN release: 2022-11-16 Fix bug plotting rem.fi models truncation used lead error thrown. (#58) Fix bugs uniform fitted adjustments (#59) Fix bug plotting left truncation used points didn’t match detection function line (Distance #134) Fix bug debug reporting uniform models used (Distance #136) Fix bug adjustment term fitting width scaling defined right minus left truncation, rather just right truncation value (Distance #133) Use (0,width) interval monotonicity checks, rather (left, width) causing issues consistent Distance Windows (Distance #135) Expose mono.outer.iter option control number outer iterations used fit monotonic model. Default 200. Make dht output tables consistent. Now always refers Region display (rather Region summary Label N/D tables). Note display change won’t break code looks extract values based column names dht object unchanged. Fixed bug leading erroneous zero totals individuals N/D tables sightings one strata. Bug apparent data sightings clusters varflag 1 option (er_method = 1 Distance ds function) selected dht function.","code":""},{"path":"/news/index.html","id":"mrds-227","dir":"Changelog","previous_headings":"","what":"mrds 2.2.7","title":"mrds 2.2.7","text":"CRAN release: 2022-08-20 Fix bug check # parameters < # data. Thanks Anne Provencher St-Pierre. longer display errors caused solnp/gosolnp constrained optimisation, can seen showit>0 necessary. EXPERIMENTAL change use fixed grid starting values using monotonicity constraints, set control$mono.random.start=TRUE get old behaviour Scale covariates absolutely rather relatively optimisation. Expected.S element dht return now data.frame list Fix total encounter rate variance stratified analysis","code":""},{"path":"/news/index.html","id":"mrds-226","dir":"Changelog","previous_headings":"","what":"mrds 2.2.6","title":"mrds 2.2.6","text":"CRAN release: 2022-03-17 Individuals summary table dht now includes k (number transects) Add effective detection radius (EDR) uncertainty summary output Change default rounding chi-squared test tables. can customized using print(ddf.gof(…), digits=?) e.g., printing knitr::kable New detection function: two-part normal (“tpn”), useful aerial surveys mountainous terrain, see Becker EF, Christ (2015) Unimodal Model Double Observer Distance Sampling Surveys. PLOS ONE 10(8): e0136403. https://doi.org/10.1371/journal.pone.0136403 ?“two-part-normal”. add_df_covar_line -> add.df.covar.line p_dist_table -> p.dist.table Variable strip widths now supported dht. Users supply additional column sample data.frame (“CoveredArea”) giving total area covered given transect set options=list(areas.supplied=TRUE). Thanks Megan Ferguson providing example, code feedback.","code":""},{"path":"/news/index.html","id":"mrds-225","dir":"Changelog","previous_headings":"","what":"mrds 2.2.5","title":"mrds 2.2.5","text":"CRAN release: 2021-07-01 use “probabalists” definition Hermite polynomials, Distance. numerically stable remove setting Hermite parameter 1 (unclear case!) refinement adjustment-key-outer optimisation, optimization now subset parameters, rather holding one parameter constant refine outer optimization, using best previous values (likelihood) rather last values. Use optimizer’s convergence diagnostic assess outer convergence. Refinement “inner” optimization (detfct.fit.opt): (1) simplification stopping rules (one () loop rather two), (2) parameters nudged bounds hit, bounds hit expanded Rescaling covariate models’ parameters (scaling difference large) inverted, causing kinds issues. Made scaling kick-smaller scales. Removed inner (detfct.fit.opt) () loop dependence bounded status, since didn’t seem make sense Stop “correcting” infinite/NaN integrals small numbers misleading optimizer think “good” values Refine constrained optimisation use actual starting values , use random start points compare two. handle case model failed AIC adjustment term selection, montonicity check throw error assign g(x)=0 g(x)<0 integrating detection function (check post-optimisation problem!) fix bug predict.ds uniform key used binned data (Thanks Noémie Cappelle reporting issue!) dht now prints additional information variance estimators used errors now thrown parameters data (either unique distance values bins)","code":""},{"path":"/news/index.html","id":"mrds-224","dir":"Changelog","previous_headings":"","what":"mrds 2.2.4","title":"mrds 2.2.4","text":"CRAN release: 2020-12-01 add_df_covar_line now plots probability density functions point transect case warning longer raised truncation set bins specified binned data (’s assumed furthest cutpoint truncation) AIC/logLik functions now work methods","code":""},{"path":"/news/index.html","id":"mrds-223","dir":"Changelog","previous_headings":"","what":"mrds 2.2.3","title":"mrds 2.2.3","text":"CRAN release: 2020-07-31 fix bug region areas duplicated properly density estimated (using Area=0 data) fix bug getting starting values hazard-rate detection functions point transect data used fix issue left truncation estimating abundance/density dht","code":""},{"path":"/news/index.html","id":"mrds-222","dir":"Changelog","previous_headings":"","what":"mrds 2.2.2","title":"mrds 2.2.2","text":"CRAN release: 2020-05-12 fix issue predict() uniform key functions used new data. new function p_dist_table() show distribution estimated probabilities detection. Useful covariate models determine issues small ps. new function add_df_covar_line(), can used add lines plots showing detection function given covariate combination. Thanks various members distance sampling mailing list suggestion. plots produced plot.ds/plot.rem/plot.rem.fi/plot.trial/plot.trial.fi/plot.io/plot.io.fi/plot.det.tables now use defaults R 4.0.0 (“lightgrey” bars histograms). deprecated arguments plot.ds removed.","code":""},{"path":"/news/index.html","id":"mrds-221","dir":"Changelog","previous_headings":"","what":"mrds 2.2.1","title":"mrds 2.2.1","text":"CRAN release: 2020-01-22 hessian now returned solnp (constrained optimisation) used fit detection function Check NA covariate values, thanks Ana Cañadas highlighting issue. enable P2 variance estimator points Corrected handling NA covariates new option se.fit predict.ds obtain standard errors probability detection ESW Fixed bug dht left truncation used. Previously left truncation ignored. See https://github.com/DistanceDevelopment/mrds/issues/22 thanks Carl Schwarz finding bug. Fix bug two objects missing observer error thrown. Thanks Ainars Aunins reporting bug Eric Rexstad diagnosing.","code":""},{"path":"/news/index.html","id":"mrds-220","dir":"Changelog","previous_headings":"","what":"mrds 2.2.0","title":"mrds 2.2.0","text":"CRAN release: 2018-06-27 fixed bug calculation Kolmogorov-Smirnov p-values. Previous methods take account parameters detection function estimated, new bootstrap-based approach implemented. time-consuming, Kolmogorov-Smirnov test longer performed default (use ks=TRUE get test). Encounter rate variance point transects points sampled equal number times incorrect. # mrds now uses P3 estimator Fewster et al (2009) point transect encounter rate variance. Bug predicting left truncation used. Previously distance column new data set zero left truncation > 0 predictions discarded, particularly problematic io, etc # mrds models. Thanks Natalie Kelly spotting suggesting fix. Add errors “P3” used encounter rate variance estimator non-point transect data, throws warning switches P3 points ’s specified.","code":""},{"path":"/news/index.html","id":"mrds-2118","dir":"Changelog","previous_headings":"","what":"mrds 2.1.18","title":"mrds 2.1.18","text":"CRAN release: 2017-07-04 fixed bug parameter rescaling scales incorrectly entered 1 due indexing bug Quantile-quantile plots now use aspect ratio 1 Bug half-normal integration code adjustments used lead likelohood evaluated incorrectly models binned (grouped) distances. effected AIC comparisons models parameter estimates . Thanks Olivier Devineau spotting ! Fix bug predict.ds() didn’t work uniform keys. Thanks Jason Roberts reporting bug. Correctly specify distbegin/distend predictions binned data, thanks Jason Roberts spotting bug. Let user know int.range set summary() results","code":""},{"path":"/news/index.html","id":"mrds-2117","dir":"Changelog","previous_headings":"","what":"mrds 2.1.17","title":"mrds 2.1.17","text":"CRAN release: 2016-10-03 fixed starting value bug hazard-rate models distances binned. Thanks Natalia Schroeder Eric Rexstad discovering . predict.ds now uses numerical integration calculate integrals (rather approximation). Thanks Eric Rexstad spotting issue goodness fit testing highlighted . plot.ds() now accepts xlab=“” argument change x axis label. Thanks Steve Ahlswede suggesting .","code":""},{"path":"/news/index.html","id":"mrds-2116","dir":"Changelog","previous_headings":"","what":"mrds 2.1.16","title":"mrds 2.1.16","text":"CRAN release: 2016-08-10 improved predict() method now Right Thing factors Fixed bug scaling histograms point transect pdf plots points plots. Thanks Erics Howe Rexstad reporting issues. can now set y axis limits using plot.ds, defaults sensible pt+point models. Thanks Eric Howe suggestion. Fixed bug setting initial values threw many errors. Thanks Laura Marshall spotting .","code":""},{"path":"/news/index.html","id":"mrds-2115","dir":"Changelog","previous_headings":"","what":"mrds 2.1.15","title":"mrds 2.1.15","text":"rescaling parameters correct, now fixed. Thanks Laura Marshall spotting . coefficients called coefficients (mixture coefficients parameters) summary() results speed-io.fi models (thanks Winston Chang’s profvis, showing many unecessary calls model.matrix) plot.ds now pdf= option plot probability density function (point transect models ) assign.par, create.ddfobj detfct now exported, can used dsm (though shouldn’t used anything else!) fixed bug left truncation probability detection calculated correctly. Thanks Jason Roberts pointing !","code":""},{"path":"/news/index.html","id":"mrds-2114","dir":"Changelog","previous_headings":"","what":"mrds 2.1.14","title":"mrds 2.1.14","text":"CRAN release: 2015-07-29 updated initialvalues calculation hazard-rate – now uses Beavers & Ramsay method scale parameters hazard-rate automatic parameter rescaling covariate models covariates poorly scaled. Now default nlminb method minor speed-logistic code distance covariate","code":""},{"path":"/news/index.html","id":"mrds-2113","dir":"Changelog","previous_headings":"","what":"mrds 2.1.13","title":"mrds 2.1.13","text":"link distance sampling Google Groups help duplicate non-convergence warning/error removed warning singular Hessian now warning() re-wrote debug output easier read dht now option (ci.width) specify confidence interval width output (thanks David Pavlacky suggestion) monotonicity now operates left->right truncation models left truncated fail error message many integration intervals used. Thanks Tiago Marques highlighting issue.","code":""},{"path":"/news/index.html","id":"mrds-2112","dir":"Changelog","previous_headings":"","what":"mrds 2.1.12","title":"mrds 2.1.12","text":"CRAN release: 2015-02-05 examples now .","code":""},{"path":"/news/index.html","id":"mrds-2111","dir":"Changelog","previous_headings":"","what":"mrds 2.1.11","title":"mrds 2.1.11","text":"Bug unif+cos(1) models using monotonicity constraints randomised starting points. Since model 1 parameter, bug selecting columns Rsolnp starting value code makes result vector, doesn’t work apply later. Workaround using randomised starting values # mrds model. Thanks Nathalie Cavada finding bug. Fixed bug pdot.dsr.integrate.logistic giving incorrect AIC values FI models binned data points lines. Fixed issue returned optimisation obejct got accessed without checked see ’s result error, causing problems encapsulating ddf functions.","code":""},{"path":"/news/index.html","id":"mrds-2110","dir":"Changelog","previous_headings":"","what":"mrds 2.1.10","title":"mrds 2.1.10","text":"CRAN release: 2014-09-27 added testing directory .Rbuildignore, tests now included built packages run CRAN. tests use source packages github.","code":""},{"path":"/news/index.html","id":"mrds-219","dir":"Changelog","previous_headings":"","what":"mrds 2.1.9","title":"mrds 2.1.9","text":"BUG FIXES removed test failed CRAN’s testing","code":""},{"path":"/news/index.html","id":"mrds-218","dir":"Changelog","previous_headings":"","what":"mrds 2.1.8","title":"mrds 2.1.8","text":"CRAN release: 2014-09-16 CHANGES * removed doeachint/cgftab code, used spline approximation effective strip width/effective area half-normal detection function used. replaced exact calculation via error function (erf). * tests updated accordingly * monotonically constrained models now use bunch random start points – uses gosolnp() Rsolnp * re-fitting jiggling parameters refined multiply uniform variable limits set upper lower bounds (+/-1) jiggling can go either way, approximately scale parameters * corrected documentation predict methods, incorrectly stated returned point transect models. Thanks Thibault Dieuleveut spotting . BUG FIXES fixed 2 bugs create.varstructure; first removal method treated trial method. second obs.table specified (Region sample labels dataframe obs) dual observers. case doubling number observations. fixed bug dht.deriv setup removal; thanks John Boulanger noticing reporting bugs","code":""},{"path":"/news/index.html","id":"mrds-217","dir":"Changelog","previous_headings":"","what":"mrds 2.1.7","title":"mrds 2.1.7","text":"BUG FIXES Standardisation applied detection functions (g(0)=1) adjustments (uneccesary) also caused issues using gamma detection functions calculated g(apex) instead. Standardisation code removed adjustments correct scaling used gamma . Thanks Thomas Doniol-Valcroze alerting us bug. Partial name-matching dht fixed. Produced warning error. NEW FEATURES Tests gamma detection functions Observations automatically ordered object observer fields (included) ddf expected double observer analysis. erroneous error message can created ordered correctly worse. Thanks Ainars Aunins bringing attention. Added function create_document() run shiny application interface # mrds create knitr document template. template currently single observer analysis behind features app fairly complete.","code":""},{"path":"/news/index.html","id":"mrds-216","dir":"Changelog","previous_headings":"","what":"mrds 2.1.6","title":"mrds 2.1.6","text":"CRAN release: 2014-06-11 BUG FIXES key+adjustment models failed converge due bugs optimisation code (mainly unif+cosine models) NEW FEATURES optimisation tips help page ?“mrds-opt”","code":""},{"path":"/news/index.html","id":"mrds-215","dir":"Changelog","previous_headings":"","what":"mrds 2.1.5","title":"mrds 2.1.5","text":"CRAN release: 2014-04-22 CHANGES * models adjustment terms covariates now allowed * mono.check function checks detection function monotonic range (observed covariate combinations covariates included)","code":""},{"path":"/news/index.html","id":"mrds-214-5","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4-5","title":"mrds 2.1.4-5","text":"CHANGES new testthat changes test locations etc, sorted . = argument plot.* now sorts first, plots always order plot.ds now friendly par() users, thanks Jason Roberts pointer BUG FIXES uniform+cosine detection functions ignored using monotonicity constraints, now can used together mono.strict=TRUE didn’t automatically turn mono=TRUE, extra logic correct montonicity constraints use standardised (g(x)/g(0) detection functions, g(x)>1 monotonicity constraints voilated. Now standardised detection functions used. Thanks Len Thomas noticing bug.","code":""},{"path":"/news/index.html","id":"mrds-214-3","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4-3","title":"mrds 2.1.4-3","text":"BUG FIX predict.io.fi work new data (thanks Len Thomas Phil Hammond pointing ) CHANGES general documentation updates simplication re-structuring internals","code":""},{"path":"/news/index.html","id":"mrds-214-3-1","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4-3","title":"mrds 2.1.4-3","text":"CHANGES internal re-structuring summary methods tests","code":""},{"path":"/news/index.html","id":"mrds-214-2","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4-2","title":"mrds 2.1.4-2","text":"CHANGES plot.ds now new argument, TRUE (default) create new window plot. general janitorial work inside plotting methods, removing simplifying old code; (hopefully) new features.","code":""},{"path":"/news/index.html","id":"mrds-214-1","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4-1","title":"mrds 2.1.4-1","text":"CHANGES Warning now issued truncation set largest distance default. updated dht documentation","code":""},{"path":"/news/index.html","id":"mrds-214","dir":"Changelog","previous_headings":"","what":"mrds 2.1.4","title":"mrds 2.1.4","text":"CRAN release: 2013-09-23 CHANGES modified det.tables plot.det.tables create plot tables depending observer configuration (io,trial,removal). plot functions (plot.ds) added argument subtitle=TRUE (default). can either TRUE, FALSE. TRUE shows sub-titles plot type. FALSE, subtitles shown. argument possible get subtitles without main title. set iterlimit=1 call rem.glm ddf.rem.fi prevent convergence issues getting starting values. created average.line.cond now used place calcp.# mrds computing average line conditional detection function weighting values estimated population proportions covariate value. now weighted sample proportions (mean value).","code":""},{"path":"/news/index.html","id":"mrds-213-1","dir":"Changelog","previous_headings":"","what":"mrds 2.1.3-1","title":"mrds 2.1.3-1","text":"BUG FIXES patched dht.se vc1=NA fail patched plot.ds issue dev.new using another graphics device plays nice Distance.","code":""},{"path":"/news/index.html","id":"mrds-213","dir":"Changelog","previous_headings":"","what":"mrds 2.1.3","title":"mrds 2.1.3","text":"CRAN release: 2013-08-13 BUG FIXES patched bug dht returning incorrect values bysample sample.area Dhat. patched code dht.se skip variance component p key=unif p=1. CHANGES modified code detfct.fit.opt io rem functions adapt changes optimx removed old depends statements optimx Rsolnp; uses import","code":""},{"path":"/news/index.html","id":"mrds-212","dir":"Changelog","previous_headings":"","what":"mrds 2.1.2","title":"mrds 2.1.2","text":"CRAN release: 2013-06-26 BUG FIXES fixed usage example lines long","code":""},{"path":"/news/index.html","id":"mrds-211","dir":"Changelog","previous_headings":"","what":"mrds 2.1.1","title":"mrds 2.1.1","text":"BUG FIXES full independence methods, calculation distance sampling component unbinned data . Code added compute component correctly binned data. required changes ddf.x.fi routines logistic integration routines. CHANGES Modified flpt.lnl code set integrals 1E-25 <=0 integrate.pdf vector argument integration range converted matrix length 2. ddf.gof now use breaks set binned data unless others specified. NEW FEATURES Added threshold detection functions (“th1” “th2”) required minor changes functions summary/print. Added xlab ylab arguments plot functions -ride default labels","code":""},{"path":"/news/index.html","id":"mrds-210","dir":"Changelog","previous_headings":"","what":"mrds 2.1.0","title":"mrds 2.1.0","text":"CRAN release: 2012-12-11 CHANGES Modified DESCRIPTION R 2.15 greater allowed. Needed optimHess jll(12/10/2012)","code":""},{"path":"/news/index.html","id":"mrds-209","dir":"Changelog","previous_headings":"","what":"mrds 2.0.9","title":"mrds 2.0.9","text":"CRAN release: 2012-12-04 NEW FEATURES New option plot=TRUE/FALSE qqplot.ddf(), want K-S CvM test statistics, plotting. dlm(11/13/2012) BUG FIXES Fixed problem obs dataframe call dht (links observations samples regions) contained fields also observation dataframe. Now fields needed obs selected merge. dlm(11/13/2012)","code":""},{"path":"/news/index.html","id":"mrds-208","dir":"Changelog","previous_headings":"","what":"mrds 2.0.8","title":"mrds 2.0.8","text":"Unchanged version sent Distance summer 2012","code":""},{"path":"/news/index.html","id":"mrds-207","dir":"Changelog","previous_headings":"","what":"mrds 2.0.7","title":"mrds 2.0.7","text":"NEW FEATURES Restructured likelihood/integration code fitting ds models Adjustment functions now work binned data. Code added assure fields distbegin distend available binned=TRUE breaks set well. Added argument adj.exp set TRUE use keyexp(adj) rather keyadj keep f(x)>0 Added following restrictions adjustments: uniform key, adj.scale must “width”; non-uniform key adj.scale=“width”, doeachint set TRUE scale integration work. Changed code several functions uniform key adjustment functions used. New option plot=TRUE/FALSE qqplot.ddf(), want K-S CvM test statistics, plotting. BUG FIXES Fixed inconsistencies use documentation showit argument Fixed bug groups recognised dht() size column occurred model data observation table. (Thanks Darren Kidney spotting .)","code":""},{"path":"/news/index.html","id":"mrds-206","dir":"Changelog","previous_headings":"","what":"mrds 2.0.6","title":"mrds 2.0.6","text":"NEW FEATURES Example code binned point count data added help ddf Modified ddf.rem.fi ddf.io.fi use starting values iterative offset glm make optimization robust Added restriction one attempts fitting adjustment functions covariates. Added code assure necessary fields available binned data (binned=TRUE). BUG FIXES Patched create.ddfobj point counts binned data work properly Patched ddf.ds stored data object$data detected=1 Patched ddf.io.fi throw error optimx() converge Patched ddf.io.fi ddf.rem.fi inclusion factor(observer) work formula Patched dht, dht.se covered.region.dht handle 0 observations Suppress package messages optimx Patched fpt.lnl, flt.lnl, print.ddf, model.description, summary.ds, print.summary.ds coef.io, coef.trial, coef.rem, plot.io, plot.trial, plot.rem handle uniform key function.","code":""},{"path":"/news/index.html","id":"mrds-205","dir":"Changelog","previous_headings":"","what":"mrds 2.0.5","title":"mrds 2.0.5","text":"CRAN release: 2012-03-27 NEW FEATURES First version submitted CRAN BUG FIXES Fixed code dht.se uses sample size detection model Satterthwaite approximation rather size selected subset observations. Fixed coef functions return parameter estimates adjustment functions .","code":""},{"path":"/news/index.html","id":"mrds-204","dir":"Changelog","previous_headings":"","what":"mrds 2.0.4","title":"mrds 2.0.4","text":"BUG FIXES Changed flt.var compute variance average p correctly point transects. Numerous changes dlm optimization code Changes documentation remove non-ASCII characters","code":""},{"path":"/news/index.html","id":"mrds-203","dir":"Changelog","previous_headings":"","what":"mrds 2.0.3","title":"mrds 2.0.3","text":"NEW FEATURES Major rewrite ddf summary functions handle adjustment functions BUG FIXES Changes det.tables gof functions use include.lowest=TRUE calls cut function Changed usage T F TRUE FALSE","code":""},{"path":"/news/index.html","id":"mrds-202","dir":"Changelog","previous_headings":"","what":"mrds 2.0.2","title":"mrds 2.0.2","text":"changes 2.0.2 earlier see ONEWS","code":""}] diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 00000000..caa9c3db --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,151 @@ + +/404.html +/articles/index.html +/articles/mrds-golftees.html +/authors.html +/index.html +/LICENSE-text.html +/news/index.html +/reference/add.df.covar.line.html +/reference/adj.check.order.html +/reference/adj.cos.html +/reference/adj.herm.html +/reference/adj.poly.html +/reference/adj.series.grad.cos.html +/reference/adj.series.grad.herm.html +/reference/adj.series.grad.poly.html +/reference/AIC.ddf.html +/reference/apex.gamma.html +/reference/assign.default.values.html +/reference/assign.par.html +/reference/average.line.cond.html +/reference/average.line.html +/reference/book.tee.data.html +/reference/calc.se.Np.html +/reference/cdf.ds.html +/reference/cds.html +/reference/check.bounds.html +/reference/check.mono.html +/reference/coef.ds.html +/reference/compute.Nht.html +/reference/covered.region.dht.html +/reference/create.bins.html +/reference/create.command.file.html +/reference/create.ddfobj.html +/reference/create.model.frame.html +/reference/create.varstructure.html +/reference/ddf.ds.html +/reference/ddf.gof.html +/reference/ddf.html +/reference/ddf.io.fi.html +/reference/ddf.io.html +/reference/ddf.rem.fi.html +/reference/ddf.rem.html +/reference/ddf.trial.fi.html +/reference/ddf.trial.html +/reference/DeltaMethod.html +/reference/det.tables.html +/reference/detfct.fit.html +/reference/detfct.fit.opt.html +/reference/dht.deriv.html +/reference/dht.html +/reference/dht.se.html +/reference/distpdf.grad.html +/reference/distpdf.html +/reference/ds.function.html +/reference/flnl.constr.grad.neg.html +/reference/flnl.grad.html +/reference/flnl.html +/reference/flt.var.html +/reference/g0.html +/reference/getpar.html +/reference/gof.ds.html +/reference/gstdint.html +/reference/histline.html +/reference/index.html +/reference/integratedetfct.logistic.html +/reference/integratelogistic.analytic.html +/reference/integratepdf.grad.html +/reference/integratepdf.html +/reference/io.glm.html +/reference/is.linear.logistic.html +/reference/is.logistic.constant.html +/reference/keyfct.grad.hn.html +/reference/keyfct.grad.hz.html +/reference/keyfct.th1.html +/reference/keyfct.th2.html +/reference/keyfct.tpn.html +/reference/lfbcvi.html +/reference/lfgcwa.html +/reference/logisticbyx.html +/reference/logisticbyz.html +/reference/logisticdetfct.html +/reference/logisticdupbyx.html +/reference/logisticdupbyx_fast.html +/reference/logit.html +/reference/logLik.ddf.html +/reference/mcds.html +/reference/mcds_dot_exe.html +/reference/mrds-package.html +/reference/mrds_opt.html +/reference/NCovered.html +/reference/nlminb_wrapper.html +/reference/p.det.html +/reference/p.dist.table.html +/reference/parse.optimx.html +/reference/pdot.dsr.integrate.logistic.html +/reference/plot.det.tables.html +/reference/plot.ds.html +/reference/plot.io.fi.html +/reference/plot.io.html +/reference/plot.rem.fi.html +/reference/plot.rem.html +/reference/plot.trial.fi.html +/reference/plot.trial.html +/reference/plot_cond.html +/reference/plot_layout.html +/reference/plot_uncond.html +/reference/predict.ds.html +/reference/print.ddf.gof.html +/reference/print.ddf.html +/reference/print.det.tables.html +/reference/print.dht.html +/reference/print.p_dist_table.html +/reference/print.summary.ds.html +/reference/print.summary.io.fi.html +/reference/print.summary.io.html +/reference/print.summary.rem.fi.html +/reference/print.summary.rem.html +/reference/print.summary.trial.fi.html +/reference/print.summary.trial.html +/reference/prob.deriv.html +/reference/prob.se.html +/reference/process.data.html +/reference/pronghorn.html +/reference/ptdata.distance.html +/reference/ptdata.dual.html +/reference/ptdata.removal.html +/reference/ptdata.single.html +/reference/qqplot.ddf.html +/reference/rem.glm.html +/reference/rescale_pars.html +/reference/sample_ddf.html +/reference/setbounds.html +/reference/setcov.html +/reference/setinitial.ds.html +/reference/sim.mix.html +/reference/solvecov.html +/reference/stake77.html +/reference/stake78.html +/reference/summary.ds.html +/reference/summary.io.fi.html +/reference/summary.io.html +/reference/summary.rem.fi.html +/reference/summary.rem.html +/reference/summary.trial.fi.html +/reference/summary.trial.html +/reference/survey.region.dht.html +/reference/test.breaks.html +/reference/varn.html + + diff --git a/vignettes/apa.csl b/vignettes/apa.csl new file mode 100644 index 00000000..3f2ccc8f --- /dev/null +++ b/vignettes/apa.csl @@ -0,0 +1,1539 @@ + + diff --git a/vignettes/golftees.bib b/vignettes/golftees.bib new file mode 100644 index 00000000..9394f63d --- /dev/null +++ b/vignettes/golftees.bib @@ -0,0 +1,35 @@ +@article{Buckland2010, + author = {Stephen T. Buckland and Jeffrey L. Laake and David L. Borchers}, + title = {Double-observer line transect methods: levels of independence}, + journal = {Biometrics}, + year = {2010}, + volume = {66}, + pages = {169--177}, + doi = {10.1111/j.1541-0420.2009.01239.x} +} +@article{Borchers2006, + author = {Borchers, D. L. and Laake, J. L. and Southwell, C. and Paxton, C. G. M.}, + title = {Accommodating unmodeled heterogeneity in double-observer distance sampling surveys}, + journal = {Biometrics}, + year = {2006}, + volume = {62}, + pages = {372--378} +} + +@article{burt_using_2014, + title = {Using mark-recapture distance sampling methods on line transect surveys}, + author = {Burt, Louise M. and Borchers, David L. and Jenkins, Kurt J. and Marques, Tigao A}, + year = {2014}, + volume = {5}, + pages = {1180--1191}, + doi = {10.1111/2041-210X.12294}, + journal = {Methods in Ecology and Evolution}, + number = {11} +} + +@Manual{Laake-mrds, + title = {mrds: Mark-Recapture Distance Sampling}, + author = {Jeff Laake and David Borchers and Len Thomas and David Miller and Jon Bishop}, + year = {2019}, + note = {R package version 2.2.2}, +} diff --git a/vignettes/mrds-golftees.Rmd b/vignettes/mrds-golftees.Rmd new file mode 100644 index 00000000..6c08ebe0 --- /dev/null +++ b/vignettes/mrds-golftees.Rmd @@ -0,0 +1,330 @@ +--- +title: "Double platform analysis" +description: | + Estimating g(0) comparing full and point independence models +author: + - name: Len Thomas + url: http://distancesampling.org + affiliation: CREEM, Univ of St Andrews + affiliation_url: https://creem.st-andrews.ac.uk +date: "`r format(Sys.time(), '%B %Y')`" +output: + bookdown::html_document2: + number_sections: false + toc: true + toc_depth: 2 + base_format: rmarkdown::html_vignette +pkgdown: + as_is: true +bibliography: golftees.bib +csl: apa.csl +vignette: > + %\VignetteIndexEntry{Double platform analysis} + %\VignetteEngine{knitr::rmarkdown} + \usepackage[utf8]{inputenc} +--- + +```{r include=FALSE} +knitr::opts_chunk$set(eval=TRUE, echo=TRUE, message=FALSE, warnings=FALSE) +``` + +This example looks at mark-recapture distance sampling (MRDS) models. The first part of this exercise involves analysis of a survey of a known number of golf tees. This is intended mainly to familiarise you with the double-platform data structure and analysis features in the R function `mrds` [@Laake-mrds]. + +To help understand the terminology using in MRDS and the output produced by `mrds`, there is a guide available [at this link](Interpreting MRDS output.pdf) called *Interpreting MRDS output: making sense of all the numbers*. + +# Aims + +The aims of this practical are to learn how to model + +- trial and independent-observer configuration +- full and point independence assumptions, +- include covariates in the detection function(s) and +- select between competing models. + +## Golf tee data + +These data come from a survey of golf tees which conducted by statistics students at the University of St Andrews. The data were collected along transect lines, 210 metres in total. A distance of 4 metres out from the centre line was searched and, for the purposes of this exercise, we assume that this comprised the total study area, which was divided into two strata. There were 250 clusters of tees in total and 760 individual tees in total. + +The population was independently surveyed by two observer teams. The following data were recorded for each detected group: perpendicular distance, cluster size, observer (team 1 or 2), 'sex' (males are yellow and females are green and golf tees occur in single-sex clusters) and 'exposure'. Exposure was a subjective judgment of whether the cluster was substantially obscured by grass (exposure=0) or not (exposure=1). The lengths of grass varied along the transect line and the grass was slightly more yellow along one part of the line compared to the rest. + +The golf tee dataset is provided as part of the `mrds` package. + +Open R and load the `mrds` package and golf tee dataset (called `book.tee.data`). The elements required for an MRDS analysis are contained within the object dataset. These data are in a hierarchical structure (rather than in a 'flat file' format) so that there are separate elements for observations, samples and regions. In the code below, each of these tables is extracted to avoid typing long names. + +```{r preliminaries, message=FALSE} +library(knitr) +library(mrds) +# Access the golf tee data +data(book.tee.data) +# Investigate the structure of the dataset +str(book.tee.data) +# Extract the list elements from the dataset into easy-to-access objects +detections <- book.tee.data$book.tee.dataframe # detection information +region <- book.tee.data$book.tee.region # region info +samples <- book.tee.data$book.tee.samples # transect info +obs <- book.tee.data$book.tee.obs # links detections to transects and regions +``` + +Examine the columns in the `detections` data because it has a particular structure. + +```{r headdet} +# Check detections +head(detections) +``` +The structure of the detection is as follows: + +- each detected object (in this case the object was a group or cluster of golf tees) is given a unique number in the `object` column, +- each `object` occurs twice - once for observer 1 and once for observer 2, +- the `detected` column indicates whether the object was seen (`detected=1`) or not seen (`detected=0`) by the observer, +- perpendicular distance is in the `distance` column and cluster size is in the `size` column (the same default names as for the `ds` function). + +To ensure that the variables `sex` and `exposure` are treated correctly, define them as factor variables. + +```{r} +# Define sex and exposure as factor variables +detections$sex <- as.factor(detections$sex) +detections$exposure <- as.factor(detections$exposure) +``` + +## Golf tee survey analyses + +### Estimation of *p(0)*: distance only + +We will start by analysing these data assuming that Observer 2 was generating trials for Observer 1 but not vice versa, i.e. trial configuration where Observer 1 is the primary and Observer 2 is the tracker. (The data could also be analysed in independent observer configuration - you are welcome to try this for yourself). We begin by assuming full independence (i.e. detections between observers are independent at all distances): this requires only a mark-recapture (MR) model and, to start with, perpendicular distance will be included as the only covariate. + +```{r, fitnocovar, message=FALSE, fig.cap="Goodness of fit (FI-trial) to golftee data.", fig.dim=c(7,5)} +# Fit trial configuration with full independence model +fi.mr.dist <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance), + data=detections, meta.data=list(width=4)) +``` + +#### Examining `mrds` output + +Having fitted the model, we can create tables summarizing the detection data. In the commands below, the tables are created using the `det.tables` function and saved to `detection.tables`. + +```{r} +# Create a set of tables summarizing the double observer data +detection.tables <- det.tables(fi.mr.dist) +# Print these detection tables +print(detection.tables) +``` + +The information in detection summary tables can be plotted, but, in the interest of space, only one (out of six possible plots) is shown (Figure \@ref(fig:dettabplot)). + +```{r dettabplot, fig.cap="Detection distances for observer 1", fig.dim=c(7,5)} +# Plot detection information, change number to see other plots +plot(detection.tables, which=1) +``` + +The plot numbers are: + +1. Histograms of distances for detections by either, or both, observers. The shaded regions show the number for observer 1. +1. Histograms of distances for detections by either, or both, observers. The shaded regions show the number for observer 2. +1. Histograms of distances for duplicates (detected by both observers). +1. Histogram of distances for detections by either, or both, observers. Not shown for trial configuration. +1. Histograms of distances for observer 2. The shaded regions indicate the number of duplicates - for example, the shaded region is the number of clusters in each distance bin that were detected by Observer 1 given that they were also detected by Observer 2 (the "|" symbol in the plot legend means "given that"). +1. Histograms of distances for observer 1. The shaded regions indicate the number of duplicates as for plot 5. Not shown for trial configuration. + +Note that if an independent observer configuration had been chosen, all plots would be available. + +A summary of the detection function model is available using the `summary` function. The Q-Q plot has the same interpretation as a Q-Q plot in a conventional, single platform analysis (Figure \@ref(fig:fisummary)). + +```{r fisummary, fig.cap="Fitted detection function for full independence, trial mode.", fig.dim=c(7,5)} +# Produce a summary of the fitted detection function object +summary(fi.mr.dist) +# Produce goodness of fit statistics and a qq plot +gof.result <- ddf.gof(fi.mr.dist, + main="Full independence, trial configuration\ngoodness of fit Golf tee data") +# Extract chi-square statistics for reporting +chi.distance <- gof.result$chisquare$chi1$chisq +chi.markrecap <- gof.result$chisquare$chi2$chisq +chi.total <- gof.result$chisquare$pooled.chi +``` + +Abbreviated $\chi^2$ goodness-of-fit assessment shows the $\chi^2$ contribution from the distance sampling model to be `r round(chi.distance,1)` and the $\chi^2$ contribution from the mark-recapture model to be `r round(chi.markrecap,1)`. The combination of these elements produces a total $\chi^2$ of `r round(chi.total$chisq,1)` with `r chi.total$df` degrees of freedom, resulting in a $p$-value of `r round(chi.total$p,3)` + +The (two) detection functions can be plotted (Figure \@ref(fig:plotdf)). + +```{r plotdf, fig.cap="Observer 1 detection function (left) and conditional detection probabilty plot (right).", fig.dim=c(7,5)} +par(mfrow=c(1,2)) +# Plot detection functions +plot(fi.mr.dist) +par(mfrow=c(1,1)) +``` + +The plot labelled + +- "Observer=1 detections" shows a histogram of Observer 1 detections with the estimated Observer 1 detection function overlaid on it and adjusted for *p(0)*. The dots show the estimated detection probability for all Observer 1 detections. +- "Conditional detection probability" shows the proportion of Obs 2's detections that were detected by Obs 1 (also see the detection tables). The fitted line is the estimated detection probability function for Obs 1 (given detection by Obs 2) - this is the MR model. Dots are estimated detection probabilities for each Obs 1 detection. + +There is some evidence of unmodelled heterogeneity in that the fitted line in the left-hand plot declines more slowly than the histogram as the distance increases. + +#### Estimating abundance + +Abundance is estimated using the `dht` function. In this function, we need to supply information about the transects and survey regions. + +```{r, abund-from-dist} +# Calculate density estimates using the dht function +tee.abund <- dht(model=fi.mr.dist, region.table=region, sample.table=samples, obs.table=obs) +# Print out results in a nice format +knitr::kable(tee.abund$individuals$summary, digits=2, + caption="Survey summary statistics for golftees") +knitr::kable(tee.abund$individuals$N, digits=2, + caption="Abundance estimates for golftee population with two strata") +``` + +The estimated abundance is `r round(tee.abund$individuals$N[3,2])` (recall that the true abundance is 760) and so this estimate is negatively biased. The 95\% confidence interval does not include the true value. + +### Estimation of *p(0)*: distance and other explanatory variables + +How about including the other covariates, `size`, `sex` and `exposure`, in the MR model? Which MR model would you use? In the command below, `distance` and `sex` are included in the detection function - remember `sex` was defined as a factor earlier on. + +In the code below, all possible models (excluding interaction terms) are fitted. + +```{r} +# Full independence model +# Set up list with possible models +mr.formula <- c("~distance","~distance+size","~distance+sex","~distance+exposure", + "~distance+size+sex","~distance+size+exposure","~distance+sex+exposure", + "~distance+size+sex+exposure") +num.mr.models <- length(mr.formula) +# Create dataframe to store results +fi.results <- data.frame(MRmodel=mr.formula, AIC=rep(NA,num.mr.models)) +# Loop through all MR models +for (i in 1:num.mr.models) { + fi.model <- ddf(method='trial.fi', + mrmodel=~glm(link='logit',formula=as.formula(mr.formula[i])), + data=detections, meta.data=list(width=4)) + fi.results$AIC[i] <- summary(fi.model)$aic +} +# Calculate delta AIC +fi.results$deltaAIC <- fi.results$AIC - min(fi.results$AIC) +# Order by delta AIC +fi.results <- fi.results[order(fi.results$deltaAIC), ] +# Print results in pretty way +knitr::kable(fi.results, digits=2) +``` + +```{r bestone} +# Fit chosen model +fi.mr.dist.sex.exp <- ddf(method='trial.fi', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), + data=detections, meta.data=list(width=4)) +``` + +We see that the preferred model contains `distance + sex + exposure` so check the goodness-of-fit statistics (Figure \@ref(fig:bestfi)) and detection function plots (Figure \@ref(fig:fidetfn)). + +```{r, bestfi, fig.cap="Preferred model goodness of fit.", fig.dim=c(7,5)} +# Check goodness-of-fit +ddf.gof(fi.mr.dist.sex.exp, main="FI trial mode\nMR=dist+sex+exp") +``` + +```{r, fidetfn, fig.cap="Detection functions for full independence model with distance, sex and exposure in MR component.", fig.dim=c(7,5)} +par(mfrow=c(1,2)) +plot(fi.mr.dist.sex.exp) +``` + +And produce abundance estimates. + +```{r} +# Get abundance estimates +tee.abund.fi <- dht(model=fi.mr.dist.sex.exp, region.table=region, + sample.table=samples, obs.table=obs) +# Print results +print(tee.abund.fi) +``` + +This model incorporates the effect of more variables causing the heterogeneity. The estimated abundance is `r round(tee.abund.fi$individuals$N[3,2])` which is less biased than the previous estimate and the 95\% confidence interval (`r round(tee.abund.fi$individuals$N[3,5])`, `r round(tee.abund.fi$individuals$N[3,6])`) contains the true value. + +The model is a reasonable fit to the data (i.e. non-significant $\chi^2$ and Cramer von Mises tests). This model has a lower AIC (`r round(fi.mr.dist.sex.exp$criterion,1)`) than the model with only distance (`r round(fi.mr.dist$criterion,2)`) and so is to be preferred. + +### Point independence + +A less restrictive assumption than full independence is point independence, which assumes that detections are only independent on the transect centre line i.e. at perpendicular distance zero [@Buckland2010]. + +Determine if a simple point independence model is better than a simple full independence one. This requires that a distance sampling (DS) model is specified as well a MR model. Here we try a half-normal key function for the DS model (Figure \@ref(fig:pit-nocovar)). + +```{r pit-nocovar, fig.cap="Point independence model in trial configuration goodness of fit.", fig.dim=c(7,5)} +# Fit trial configuration with point independence model +pi.mr.dist <- ddf(method='trial', + mrmodel=~glm(link='logit', formula=~distance), + dsmodel=~cds(key='hn'), + data=detections, meta.data=list(width=4)) +# Summary pf the model +summary(pi.mr.dist) +# Produce goodness of fit statistics and a qq plot +gof.results <- ddf.gof(pi.mr.dist, + main="Point independence, trial configuration\n goodness of fit Golftee data") +``` + +The AIC for this point independence model is `r round(pi.mr.dist$criterion,2)` which is marginally smaller than the first full independence model that was fitted and hence is to be preferred. + +```{r,} +# Get abundance estimates +tee.abund.pi <- dht(model=pi.mr.dist, region.table=region, + sample.table=samples, obs.table=obs) +# Print results +print(tee.abund.pi) +``` + +This results in an estimated abundance of `r round(tee.abund.pi$individuals$N[3,2])`. Can we do better if more covariates are included in the DS model? + +#### Covariates in the DS model + +To include covariates in the DS detection function, we need to specify an MCDS model as follows: + +```{r pit-mod1, fig.dim=c(7,5)} +# Fit the PI-trial model - DS sex and MR distance +pi.mr.dist.ds.sex <- ddf(method='trial', + mrmodel=~glm(link='logit',formula=~distance), + dsmodel=~mcds(key='hn',formula=~sex), + data=detections, meta.data=list(width=4)) +``` + +Use the `summary` function to check the AIC and decide if you are going to include any additional covariates in the detection function. + +Now try a point independence model that has the preferred MR model from your full independence analyses. + + +```{r} +# Point independence model, Include covariates in DS model +# Use selected MR model, iterate across DS models +ds.formula <- c("~size","~sex","~exposure","~size+sex","~size+exposure","~sex+exposure", + "~size+sex+exposure") +num.ds.models <- length(ds.formula) +# Create dataframe to store results +pi.results <- data.frame(DSmodel=ds.formula, AIC=rep(NA,num.ds.models)) +# Loop through ds models - use selected MR model from earlier +for (i in 1:num.ds.models) { + pi.model <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), + dsmodel=~mcds(key='hn',formula=as.formula(ds.formula[i])), + data=detections, meta.data=list(width=4)) + pi.results$AIC[i] <- summary(pi.model)$AIC +} +# Calculate delta AIC +pi.results$deltaAIC <- pi.results$AIC - min(pi.results$AIC) +# Order by delta AIC +pi.results <- pi.results[order(pi.results$deltaAIC), ] +knitr::kable(pi.results, digits = 2) +``` + +This indicates that `sex` should be included in the DS model. We do this and check the goodness of fit and obtain abundance (Figure \@ref(fig:pidssex)). + +```{r pidssex, fig.cap="Goodness of fit of point independence model with sex covariate in the distance sampling component and distance, sex and exposure in the mr component.", fig.dim=c(7,5)} +# Fit chosen model +pi.ds.sex <- ddf(method='trial', mrmodel=~glm(link='logit',formula=~distance+sex+exposure), + dsmodel=~mcds(key='hn',formula=~sex), data=detections, + meta.data=list(width=4)) +summary(pi.ds.sex) +# Check goodness-of-fit +ddf.gof(pi.ds.sex, main="PI trial configutation\nGolfTee DS model sex") +# Get abundance estimates +tee.abund.pi.ds.sex <- dht(model=pi.ds.sex, region.table=region, + sample.table=samples, obs.table=obs) +print(tee.abund.pi.ds.sex) +``` + +This model estimated an abundance of `r round(tee.abund.pi.ds.sex$individuals$N[3,2])`, which is closest to the true value of all the models - it is still less than the true value indicating, perhaps, some unmodelled heterogeneity on the trackline (or perhaps just bad luck - remember this was only one survey). + +Was this complex modelling worthwhile? In this case, the estimated $p(0)$ for the best model was `r round(summary(pi.ds.sex)$mr.summary$average.p0.1,3)` (which is very close to 1). If we ran a conventional distance sampling analysis, pooling the data from the two observers, we should get a very robust estimate of true abundance. + +## References